java實(shí)現(xiàn)多線程兩種方法的比較
先看一下java線程運(yùn)行時各個階段的運(yùn)行狀態(tài)
java實(shí)現(xiàn)多線程有兩種方法
1、繼承Thread類
2、實(shí)現(xiàn)Runnable接口
這兩種方法的共同點(diǎn):
不論用哪種方法,都必須用Thread(如果是Thead子類就用它本身)產(chǎn)生線程,然后再調(diào)用start()方法。
兩種方法的不同點(diǎn):
1、繼承Thread類有一個缺點(diǎn)就是單繼承,而實(shí)現(xiàn)Runnable接口則彌補(bǔ)了它的缺點(diǎn),可以實(shí)現(xiàn)多繼承
2、繼承Thread類必須如果產(chǎn)生Runnable實(shí)例對象,就必須產(chǎn)生多個Runnable實(shí)例對象,然后再用Thread產(chǎn)生多個線程;而實(shí)現(xiàn)Runnable接口,只需要建立一個實(shí)現(xiàn)這個類的實(shí)例,然后用這一個實(shí)例對象產(chǎn)生多個線程。即實(shí)現(xiàn)了資源的共享性
基于以上兩點(diǎn)所以建議用第二種方法
下面用例子來做說明
程序1:





















































程序的運(yùn)行結(jié)果是:
這是繼承了Thread類,第一種方法產(chǎn)生多個Runnable實(shí)例對象,然后用Thread產(chǎn)生多個線程
第二種方法,因為這個類已經(jīng)繼承了Thread類,所以就可以直接利用它本身產(chǎn)生多個線程
程序2:






























程序運(yùn)行結(jié)果:
這個程序是實(shí)現(xiàn)Runnable了,產(chǎn)生一類的實(shí)例對象,然后用Thread產(chǎn)生多個線程。