java2實(shí)用教程第4版第12章java多線程機(jī)制

java2實(shí)用教程第4版第12章java多線程機(jī)制

ID:36198505

大小:786.31 KB

頁數(shù):28頁

時(shí)間:2019-05-07

java2實(shí)用教程第4版第12章java多線程機(jī)制_第1頁
java2實(shí)用教程第4版第12章java多線程機(jī)制_第2頁
java2實(shí)用教程第4版第12章java多線程機(jī)制_第3頁
java2實(shí)用教程第4版第12章java多線程機(jī)制_第4頁
java2實(shí)用教程第4版第12章java多線程機(jī)制_第5頁
資源描述:

《java2實(shí)用教程第4版第12章java多線程機(jī)制》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、注意:開始用功了!第頁《Java2實(shí)用教程(第4版)》第12章配合例子源代碼一起使用Powerpoint制作:耿祥義張躍平Java多線程機(jī)制第頁導(dǎo)讀主要內(nèi)容Java中的線程Thread類與線程的創(chuàng)建線程的常用方法線程同步協(xié)調(diào)同步的線程線程聯(lián)合GUI線程計(jì)時(shí)器線程第頁§12.1進(jìn)程與線程§12.1.1操作系統(tǒng)與進(jìn)程程序是一段靜態(tài)的代碼,它是應(yīng)用軟件執(zhí)行的藍(lán)本。進(jìn)程是程序的一次動(dòng)態(tài)執(zhí)行過程,它對(duì)應(yīng)了從代碼加載、執(zhí)行至執(zhí)行完畢的一個(gè)完整過程,這個(gè)過程也是進(jìn)程本身從產(chǎn)生、發(fā)展至消亡的過程?,F(xiàn)代操作系統(tǒng)可以

2、同時(shí)管理一個(gè)計(jì)算機(jī)系統(tǒng)中的多個(gè)進(jìn)程,即可以讓計(jì)算機(jī)系統(tǒng)中的多個(gè)進(jìn)程輪流使用CPU資源。第頁§12.1.2進(jìn)程與線程線程是比進(jìn)程更小的執(zhí)行單位,一個(gè)進(jìn)程在其執(zhí)行過程中,可以產(chǎn)生多個(gè)線程,形成多條執(zhí)行線索,每條線索,即每個(gè)線程也有它自身的產(chǎn)生、存在和消亡的過程。線程間可以共享進(jìn)程中的某些內(nèi)存單元(包括代碼與數(shù)據(jù)),線程的中斷與恢復(fù)可以更加節(jié)省系統(tǒng)的開銷。第頁§12.2Java中的線程§12.2.1Java的多線程機(jī)制Java語言的一大特性點(diǎn)就是內(nèi)置對(duì)多線程的支持。Java虛擬機(jī)快速地把控制從一個(gè)線程切

3、換到另一個(gè)線程。這些線程將被輪流執(zhí)行,使得每個(gè)線程都有機(jī)會(huì)使用CPU資源。第頁§12.2.2主線程(main線程)每個(gè)Java應(yīng)用程序都有一個(gè)缺省的主線程。當(dāng)JVM(JavaVirtualMachine虛擬機(jī))加載代碼,發(fā)現(xiàn)main方法之后,就會(huì)啟動(dòng)一個(gè)線程,這個(gè)線程稱為“主線程”(main線程),該線程負(fù)責(zé)執(zhí)行main方法。JVM一直要等到Java應(yīng)用程序中的所有線程都結(jié)束之后,才結(jié)束Java應(yīng)用程序。第頁§12.2.3線程的狀態(tài)與生命周期建的線程在它的一個(gè)完整的生命周期中通常要經(jīng)歷如下的四種狀

4、態(tài):1.新建:當(dāng)一個(gè)Thread類或其子類的對(duì)象被聲明并創(chuàng)建時(shí),新生的線程對(duì)象處于新建狀態(tài)。2.運(yùn)行:線程必須調(diào)用start()方法(從父類繼承的方法)通知JVM,這樣JVM就會(huì)知道又有一個(gè)新一個(gè)線程排隊(duì)等候切換了。一旦輪到它來享用CPU資源時(shí),此線程的就可以脫離創(chuàng)建它的主線程獨(dú)立開始自己的生命周期了。3.中斷:有4種原因的中斷:◆JVM將CPU資源從當(dāng)前線程切換給其他線程,使本線程讓出CPU的使用權(quán)處于中斷狀態(tài)?!艟€程使用CPU資源期間,執(zhí)行了sleep(intmillsecond)方法,使當(dāng)前

5、線程進(jìn)入休眠狀?!艟€程使用CPU資源期間,執(zhí)行了wait()方法。◆線程使用CPU資源期間,執(zhí)行某個(gè)操作進(jìn)入阻塞狀態(tài)。4.死亡:處于死亡狀態(tài)的線程不具有繼續(xù)運(yùn)行的能力。線程釋放了實(shí)體。第頁例子1(Example12_1.java)通過分析運(yùn)行結(jié)果闡述線程的4種狀態(tài)。例子1在主線程中用Thread的子類創(chuàng)建了兩個(gè)線程(SpeakElephant.java,SpeakCar.java),這兩個(gè)線程分別在命令行窗口輸出20句“大象”和“轎車”;主線程在命令行窗口輸出15句“主人”。例子1的運(yùn)行效果如圖1

6、2.4。例子1在不同的計(jì)算機(jī)運(yùn)行或在同一臺(tái)計(jì)算機(jī)反復(fù)運(yùn)行的結(jié)果不盡相同,輸出結(jié)果依賴當(dāng)前CPU資源的使用情況。第頁§12.2.4線程調(diào)度與優(yōu)先級(jí)處于就緒狀態(tài)的線程首先進(jìn)入就緒隊(duì)列排隊(duì)等候CPU資源,同一時(shí)刻在就緒隊(duì)列中的線程可能有多個(gè)。Java虛擬機(jī)(JVM)中的線程調(diào)度器負(fù)責(zé)管理線程,調(diào)度器把線程的優(yōu)先級(jí)分為10個(gè)級(jí)別,分別用Thread類中的類常量表示。Java調(diào)度器的任務(wù)是使高優(yōu)先級(jí)的線程能始終運(yùn)行,一旦時(shí)間片有空閑,則使具有同等優(yōu)先級(jí)的線程以輪流的方式順序使用時(shí)間片。第頁§12.3Thre

7、ad類與線程的創(chuàng)建§12.3.1使用Thread的子類在Java語言中,用Thread類或子類創(chuàng)建線程對(duì)象。在編寫Thread類的子類時(shí),需要重寫父類的run()方法,其目的是規(guī)定線程的具體操作,否則線程就什么也不做,因?yàn)楦割惖膔un()方法中沒有任何操作語句。第頁§12.3.2使用Thread類創(chuàng)建線程的另一個(gè)途徑就是用Thread類直接創(chuàng)建線程對(duì)象。使用Thread創(chuàng)建線程通常使用的構(gòu)造方法是:Thread(Runnabletarget)該構(gòu)造方法中的參數(shù)是一個(gè)Runnable類型的接口。在創(chuàng)

8、建線程對(duì)象時(shí)必須向構(gòu)造方法的參數(shù)傳遞一個(gè)實(shí)現(xiàn)Runnable接口類的實(shí)例,該實(shí)例對(duì)象稱作所創(chuàng)線程的目標(biāo)對(duì)象,當(dāng)線程調(diào)用start()方法后,一旦輪到它來享用CPU資源,目標(biāo)對(duì)象就會(huì)自動(dòng)調(diào)用接口中的run()方法(接口回調(diào))。例子2(Example12_2.java,ElephantTarget.java,CarTarget.java)和前面的例子1不同,不使用Thread類的子類創(chuàng)建線程,而是使用Thread類創(chuàng)建speakElephant和speakCar線程,請(qǐng)讀者注意比較例子

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。