scjp培訓(xùn)資料第11章java線 程.doc

scjp培訓(xùn)資料第11章java線 程.doc

ID:50617951

大?。?69.00 KB

頁數(shù):25頁

時(shí)間:2020-03-07

scjp培訓(xùn)資料第11章java線 程.doc_第1頁
scjp培訓(xùn)資料第11章java線 程.doc_第2頁
scjp培訓(xùn)資料第11章java線 程.doc_第3頁
scjp培訓(xùn)資料第11章java線 程.doc_第4頁
scjp培訓(xùn)資料第11章java線 程.doc_第5頁
資源描述:

《scjp培訓(xùn)資料第11章java線 程.doc》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

1、第11章線程本模塊討論多線程,它允許一個(gè)程序同時(shí)執(zhí)行多個(gè)任務(wù)。第一節(jié)相關(guān)問題討論-以下為與本模塊內(nèi)容有關(guān)的問題:l我如何使我的程序執(zhí)行多個(gè)任務(wù)?第二節(jié)目標(biāo)在完成了本模塊的學(xué)習(xí)后,你應(yīng)當(dāng)能夠:l定義一個(gè)線程l在一個(gè)Java程序中創(chuàng)建若干分離的線程,控制線程使用的代碼和數(shù)據(jù)l控制線程的執(zhí)行,并用線程編寫?yīng)毩⒂谄脚_的代碼l描述在多個(gè)線程共享數(shù)據(jù)時(shí)可能會碰到的困難l使用synchronized關(guān)鍵字保護(hù)數(shù)據(jù)不受破壞l使用wait()和notify()使線程間相互通信l解釋為什么在JDK1.2中不贊成使用suspend()、resume()和stop()方法?第三節(jié)線程線程l什么是線程?l虛擬處理機(jī)

2、13.3.1什么是線程?一個(gè)關(guān)于計(jì)算機(jī)的簡化的視圖是:它有一個(gè)執(zhí)行計(jì)算的處理機(jī)、包含處理機(jī)所執(zhí)行的程序的ROM(只讀存儲器)、包含程序所要操作的數(shù)據(jù)的RAM(只讀存儲器)。在這個(gè)簡化視圖中,只能執(zhí)行一個(gè)作業(yè)。一個(gè)關(guān)于最現(xiàn)代計(jì)算機(jī)比較完整的視圖允許計(jì)算機(jī)在同時(shí)執(zhí)行一個(gè)以上的作業(yè)。你不需關(guān)心這一點(diǎn)是如何實(shí)現(xiàn)的,只需從編程的角度考慮就可以了。如果你要執(zhí)行一個(gè)以上的作業(yè),這類似有一臺以上的計(jì)算機(jī)。在這個(gè)模型中,線程或執(zhí)行上下文,被認(rèn)為是帶有自己的程序代碼和數(shù)據(jù)的虛擬處理機(jī)的封裝。java.lang.Thread類允許用戶創(chuàng)建并控制他們的線程。注-在這個(gè)模塊中,使用“Thread”時(shí)是指java.l

3、ang.Thread而使用“thread”時(shí)是指執(zhí)行上下文。13.3.2線程的三個(gè)部分線程的三個(gè)部分l處理機(jī)l代碼l數(shù)據(jù)進(jìn)程是正在執(zhí)行的程序。一個(gè)或更多的線程構(gòu)成了一個(gè)進(jìn)程。一個(gè)線程或執(zhí)行上下文由三個(gè)主要部分組成l一個(gè)虛擬處理機(jī)lCPU執(zhí)行的代碼l代碼操作的數(shù)據(jù)代碼可以或不可以由多個(gè)線程共享,這和數(shù)據(jù)是獨(dú)立的。兩個(gè)線程如果執(zhí)行同一個(gè)類的實(shí)例代碼,則它們可以共享相同的代碼。類似地,數(shù)據(jù)可以或不可以由多個(gè)線程共享,這和代碼是獨(dú)立的。兩個(gè)線程如果共享對一個(gè)公共對象的存取,則它們可以共享相同的數(shù)據(jù)。在Java編程中,虛擬處理機(jī)封裝在Thread類的一個(gè)實(shí)例里。構(gòu)造線程時(shí),定義其上下文的代碼和數(shù)據(jù)是

4、由傳遞給它的構(gòu)造函數(shù)的對象指定的。第四節(jié)Java編程中的線程13.4.1創(chuàng)建線程創(chuàng)建線程l多線程編程l從同一個(gè)Runnbale實(shí)例派生的多線程l線程共享數(shù)據(jù)和代碼。本節(jié)介紹了如何創(chuàng)建線程,以及如何使用構(gòu)造函數(shù)參數(shù)來為一個(gè)線程提供運(yùn)行時(shí)的數(shù)據(jù)和代碼。一個(gè)Thread類構(gòu)造函數(shù)帶有一個(gè)參數(shù),它是Runnable的一個(gè)實(shí)例。一個(gè)Runnable是由一個(gè)實(shí)現(xiàn)了Runnable接口(即,提供了一個(gè)publicvoidrun()方法)的類產(chǎn)生的。例如:1.publicclassThreadTest{2.publicstaticvoidmain(Stringargs[]){3.Xyzr=newXyz()

5、;4.Threadt=newThread(r);5.}6.}7.8.classXyzimplementsRunnable{9.inti;10.11.publicvoidrun(){12.while(true){13.System.out.println("Hello"+i++);14.if(i==50)break;15.}16.}17.}首先,main()方法構(gòu)造了Xyz類的一個(gè)實(shí)例r。實(shí)例r有它自己的數(shù)據(jù),在這里就是整數(shù)i。因?yàn)閷?shí)例r是傳給Thread的類構(gòu)造函數(shù)的,所以r的整數(shù)i就是線程運(yùn)行時(shí)刻所操作的數(shù)據(jù)。線程總是從它所裝載的Runnable實(shí)例(在本例中,這個(gè)實(shí)例就是r。)的run

6、()方法開始運(yùn)行。一個(gè)多線程編程環(huán)境允許創(chuàng)建基于同一個(gè)Runnable實(shí)例的多個(gè)線程。這可以通過以下方法來做到:Threadt1=newThread(r);Threadt2=newThread(r);此時(shí),這兩個(gè)線程共享數(shù)據(jù)和代碼??傊€程通過Thread對象的一個(gè)實(shí)例引用。線程從裝入的Runnble實(shí)例的run()方法開始執(zhí)行。線程操作的數(shù)據(jù)從傳遞給Thread構(gòu)造函數(shù)的Runnable的特定實(shí)例處獲得。13.4.2啟動線程啟動線程l使用start()方法l使線程置于可運(yùn)行狀態(tài)一個(gè)新創(chuàng)建的線程并不自動開始運(yùn)行。你必須調(diào)用它的start()方法。例如,你可以發(fā)現(xiàn)上例中第4行代碼中的命令:

7、t.start();調(diào)用start()方法使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。這并不意味著線程就會立即運(yùn)行。13.4.3線程調(diào)度一個(gè)Thread對象在它的生命周期中會處于各種不同的狀態(tài)。下圖形象地說明了這點(diǎn):盡管線程變?yōu)榭蛇\(yùn)行的,但它并不立即開始運(yùn)行。在一個(gè)只帶有一個(gè)處理機(jī)的機(jī)器上,在一個(gè)時(shí)刻只能進(jìn)行一個(gè)動作。下節(jié)描述了如果有一個(gè)以上可運(yùn)行線程時(shí),如何分配處理機(jī)。在Java中,線程是

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

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

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