教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

Java基礎(chǔ)教程:多線(xiàn)程(3)-----創(chuàng)建線(xiàn)程的第二種方式

更新時(shí)間:2017年11月14日15時(shí)48分 來(lái)源:傳智播客 瀏覽次數(shù):

Java中只支持單繼承,一個(gè)類(lèi)一旦有了父類(lèi)就無(wú)法再繼承其它類(lèi)。比如學(xué)生類(lèi)Dog繼承了Animal類(lèi),這時(shí)由于單繼承的局限性,導(dǎo)致Dog類(lèi)無(wú)法通過(guò)繼承Thread類(lèi)創(chuàng)建線(xiàn)程。為了解決這個(gè)問(wèn)題,在JDK中提供了一個(gè)java.lang.Runnable接口,通過(guò)創(chuàng)建Runnable接口實(shí)現(xiàn)類(lèi)的實(shí)例對(duì)象,并將該對(duì)象與Thread對(duì)象相關(guān)聯(lián)可以創(chuàng)建線(xiàn)程,代碼如下所示: public class TestRunnable {

publicstatic void main(String[] args) {

Aa = new A(); // 創(chuàng)建A類(lèi)的一個(gè)實(shí)例對(duì)象

Threadt = new Thread(a); // 創(chuàng)建一個(gè)Thread類(lèi)的實(shí)例

t.start(); // 使線(xiàn)程進(jìn)去Runnable狀態(tài)

while(true) {

System.out.println(Thread.currentThread().getName()

+"................... 主線(xiàn)程 is running");

}

}

}

class A implements Runnable {

publicvoid run() { // 線(xiàn)程的代碼段,當(dāng)調(diào)用start()方法時(shí),線(xiàn)程從此處開(kāi)始執(zhí)行

while(true) {

System.out.println(Thread.currentThread().getName()

+"...................A is running");

}

}

}

運(yùn)行結(jié)果如下所示

Thread-0...................A is running

Thread-0...................A is running

Thread-0...................A is running

main ................... 主線(xiàn)程 is running

main ................... 主線(xiàn)程 is running

main ................... 主線(xiàn)程 is running

......

從例子可以看到,一個(gè)類(lèi)通過(guò)實(shí)現(xiàn)Runnable接口,并把該類(lèi)的實(shí)例對(duì)象傳遞給Thread的構(gòu)造方法可以創(chuàng)建線(xiàn)程。這樣的創(chuàng)建方式有一下幾個(gè)好處:

1.適合多個(gè)相同程序代碼的線(xiàn)程去處理同一個(gè)資源的情況,把線(xiàn)程同程序代碼、數(shù)據(jù)有效的分離,很好的體現(xiàn)了面向?qū)ο蟮脑O(shè)計(jì)思想。

2.可以避免由于Java的單繼承帶來(lái)的局限性。在開(kāi)發(fā)中經(jīng)常碰到這樣一種情況,就是使用一個(gè)已經(jīng)繼承了某一個(gè)類(lèi)的子類(lèi)創(chuàng)建線(xiàn)程,由于一個(gè) 類(lèi)不能同時(shí)有兩個(gè)父類(lèi),所以不能用繼承Thread類(lèi)的方式,那么就只能采用實(shí)現(xiàn)Runnable接口的方式。友情提示:獲得更多學(xué)科學(xué)習(xí)視頻+資料+源碼,請(qǐng)加QQ:3276250747。

作者:傳智播客java學(xué)院
0 分享到:
和我們?cè)诰€(xiàn)交談!