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

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

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

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

在Java中,實(shí)現(xiàn)多線(xiàn)程操作有兩種方式,一種是繼承java.lang包下的Thread類(lèi),覆寫(xiě)Thread類(lèi)的run()方法,在run()方法中實(shí)現(xiàn)運(yùn)行在線(xiàn)程上的代碼。另一種就是實(shí)現(xiàn)java.lang.Runnable接口,同樣是在run()方法中實(shí)現(xiàn)運(yùn)行在線(xiàn)程上的代碼。兩種方式的區(qū)別在于,繼承Thread類(lèi)可以直接啟動(dòng)線(xiàn)程,實(shí)現(xiàn)Runnable接口不能直接啟動(dòng)線(xiàn)程,需要先創(chuàng)建Thread類(lèi)的實(shí)例對(duì)象,通過(guò)Thread類(lèi)的構(gòu)造方法傳入實(shí)現(xiàn)了Runnable接口的實(shí)例對(duì)象,然后通過(guò)Thread類(lèi)來(lái)啟動(dòng)線(xiàn)程。因此,這兩種方式都會(huì)用到Thread類(lèi),由此可見(jiàn)該類(lèi)在多線(xiàn)程中的重要性,接下來(lái)就通過(guò)一些實(shí)例針對(duì)Java中多線(xiàn)程的兩種創(chuàng)建方式分別進(jìn)行講解,并比較它們的優(yōu)缺點(diǎn)。

創(chuàng)建線(xiàn)程的第一種方式----繼承Thread類(lèi),代碼如下所示:

public class Example02 {

publicstatic void main(String[] args) {

Clientt2=new Client();

t2.start();

while(true) {

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

+"................... Client2 is running");

}

}

}

class Client extends Thread {

publicvoid run() {

while(true) {

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

+ "...................Client1 isrunning");

}

}

}

例程中,Client類(lèi)繼承了Thread類(lèi),也就具有了Thread類(lèi)的全部特點(diǎn),在main()方法中創(chuàng)建Client的實(shí)例對(duì)象,并調(diào)用從Thread類(lèi)繼承的start()方法開(kāi)啟線(xiàn)程,兩個(gè)while循環(huán)處的代碼交替運(yùn)行。為了方便看出哪個(gè)線(xiàn)程正在運(yùn)行,可以通過(guò)Thread.currentThread().getName()方法獲得當(dāng)前線(xiàn)程的名稱(chēng),默認(rèn)情況下,主線(xiàn)程的名稱(chēng)為main,用戶(hù)啟動(dòng)的多條線(xiàn)程的名稱(chēng)依次為T(mén)hread-0、Thread-1、Thread-2……Thread-n等。接下來(lái)通過(guò)單線(xiàn)程和多線(xiàn)程運(yùn)行的流程圖來(lái)說(shuō)明它們的區(qū)別,如下圖所示。

從圖中可知,單線(xiàn)程中,main()方法必須等到Client的print()方法返回后才能繼續(xù)運(yùn)行,而在多線(xiàn)程中,main()方法和Client的run()方法運(yùn)行在各自的線(xiàn)程中,互不影響。這就好比一個(gè)1G的CPU分成了兩個(gè)500M的CPU,在一個(gè)CPU上運(yùn)行main()方法,另一個(gè)CPU上運(yùn)行Client的run()方法。

大家可能會(huì)有這樣的疑問(wèn):程序沒(méi)有直接調(diào)用Client對(duì)象的run()方法,而是調(diào)用了該對(duì)象從Thread類(lèi)繼承來(lái)的start()方法,那為什么會(huì)執(zhí)行run()方法呢? 這是因?yàn)閟tart()方法有兩個(gè)作用,一是開(kāi)啟一個(gè)新的線(xiàn)程,二是調(diào)用Thread子類(lèi)對(duì)象的run()方法。如果直接調(diào)用線(xiàn)程對(duì)象的run()方法,線(xiàn)程對(duì)象只是一個(gè)普通類(lèi)的實(shí)例對(duì)象,新的線(xiàn)程并沒(méi)有開(kāi)啟,run()方法中的代碼也只會(huì)在主線(xiàn)程中執(zhí)行。

友情提示:獲得更多學(xué)科學(xué)習(xí)視頻+資料+源碼,請(qǐng)加QQ:3276250747。

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