java課件第13章多線程.ppt

java課件第13章多線程.ppt

ID:57057948

大?。?70.50 KB

頁(yè)數(shù):42頁(yè)

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

java課件第13章多線程.ppt_第1頁(yè)
java課件第13章多線程.ppt_第2頁(yè)
java課件第13章多線程.ppt_第3頁(yè)
java課件第13章多線程.ppt_第4頁(yè)
java課件第13章多線程.ppt_第5頁(yè)
資源描述:

《java課件第13章多線程.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、第13章多線程主要內(nèi)容13.1Java線程的運(yùn)行機(jī)制13.2線程的創(chuàng)建和啟動(dòng)13.3線程的狀態(tài)轉(zhuǎn)換13.4線程調(diào)度13.5獲得當(dāng)前線程對(duì)象的引用13.6后臺(tái)線程13.8線程的同步13.9線程通信線程的概念進(jìn)程是指運(yùn)行中的應(yīng)用程序,每一個(gè)進(jìn)程都有自己獨(dú)立的內(nèi)存空間。一個(gè)應(yīng)用程序可以同時(shí)啟動(dòng)多個(gè)進(jìn)程。線程是指進(jìn)程中的一個(gè)執(zhí)行流程,有時(shí)也稱為執(zhí)行情景。一個(gè)進(jìn)程可以由多個(gè)線程組成,即在一個(gè)進(jìn)程中可以同時(shí)運(yùn)行多個(gè)不同的線程,它們分別執(zhí)行不同的任務(wù)。當(dāng)進(jìn)程內(nèi)的多個(gè)線程同時(shí)運(yùn)行時(shí),這種運(yùn)行方式稱為并發(fā)運(yùn)行。區(qū)別:每個(gè)進(jìn)程都需要操作系統(tǒng)為其分配獨(dú)立的內(nèi)存地址空間

2、,同一進(jìn)程中的所有線程在同一塊地址空間中工作,這些線程可以共享同一塊內(nèi)存和系統(tǒng)資源。13.1Java線程的運(yùn)行機(jī)制在Java虛擬機(jī)進(jìn)程中,執(zhí)行程序代碼的任務(wù)是由線程來(lái)完成的。每個(gè)線程都有一個(gè)獨(dú)立的程序計(jì)數(shù)器和方法調(diào)用棧。例程13-1publicclassSample{privateinta;//實(shí)例變量publicintmethod(){intb=0;//局部變量a++;b=a;returnb;}publicstaticvoidmain(Stringargs[]){Samples=null;//局部變量inta=0;//局部變量s=newSamp

3、le();a=s.method();System.out.println(a);}}主線程每當(dāng)用java命令啟動(dòng)一個(gè)Java虛擬機(jī)進(jìn)程時(shí),Java虛擬機(jī)都會(huì)創(chuàng)建一個(gè)主線程,該線程從程序入口main()方法開(kāi)始執(zhí)行。13.2線程的創(chuàng)建和啟動(dòng)用戶可以創(chuàng)建自己的線程,它將和主線程并發(fā)運(yùn)行。創(chuàng)建線程的兩種方式:擴(kuò)展java.lang.Thread類實(shí)現(xiàn)Runnable接口13.2.1擴(kuò)展java.lang.Thread類Thread類代表線程類,它的最主要的兩個(gè)方法是:run()——包含線程運(yùn)行時(shí)所執(zhí)行的代碼。start()——用于啟動(dòng)線程。用戶的線程只

4、需要繼承Thread類,覆蓋Thread類的run()方法即可。例程13-2線程的運(yùn)行過(guò)程及Thread類的start()方法的用法主線程與用戶自定義的線程并發(fā)運(yùn)行例程13-3多個(gè)線程共享同一個(gè)對(duì)象的實(shí)例變量例程13-4線程的運(yùn)行過(guò)程及Thread類的start()方法的用法(續(xù))不要隨便覆蓋Thread類的start()方法例程13-5、例程13-6一個(gè)線程只能被啟動(dòng)一次13.2.2實(shí)現(xiàn)Runnable接口Java不支持多繼承。一旦一個(gè)類繼承了Thread類,就不能再繼承其他的類。Java提供了java.lang.Runnable接口,它有一個(gè)

5、run()方法。publicvoidrun();Thread(Runnabletarget)構(gòu)造方法創(chuàng)建的線程將調(diào)用那個(gè)實(shí)現(xiàn)了Runnable接口的類對(duì)象中的run()方法作為其運(yùn)行代碼,而不再調(diào)用Thread類中的run()方法了。例程13-713.3線程的狀態(tài)轉(zhuǎn)換線程在它的生命周期中會(huì)處于各種不同的狀態(tài)。wait()yield新建狀態(tài)(New):用new語(yǔ)句創(chuàng)建的線程處于新建狀態(tài),此時(shí)它和其他對(duì)象一樣,僅僅在堆中被分配了內(nèi)存。就緒狀態(tài)(Runnable):當(dāng)一個(gè)線程對(duì)象創(chuàng)建后,其他線程調(diào)用它的start()方法,該線程就進(jìn)入就緒狀態(tài),Java

6、虛擬機(jī)會(huì)為它創(chuàng)建方法調(diào)用棧和程序計(jì)數(shù)器。處于這個(gè)狀態(tài)的線程位于可運(yùn)行池中,等待獲得CPU的使用權(quán)。運(yùn)行狀態(tài)(Running):處于這個(gè)狀態(tài)的線程占用CPU,執(zhí)行程序代碼。只有處于就緒狀態(tài)的線程才有機(jī)會(huì)轉(zhuǎn)到運(yùn)行狀態(tài)。阻塞狀態(tài)(Blocked):是指線程因?yàn)槟承┰蚍艞塁PU,暫時(shí)停止運(yùn)行。當(dāng)線程處于阻塞狀態(tài)時(shí),Java虛擬機(jī)不會(huì)給線程分配CPU,直到線程重新進(jìn)入就緒狀態(tài),它才有機(jī)會(huì)轉(zhuǎn)到運(yùn)行狀態(tài)。阻塞狀態(tài)可分為以下3種:位于對(duì)象等待池中的阻塞狀態(tài)(Blockedinobject’swaitpool):wait()位于對(duì)象鎖池中的阻塞狀態(tài)(Blocke

7、dinobject’slockpool):同步鎖其他阻塞狀態(tài)(OtherwiseBlocked):sleep()、join()、I/O請(qǐng)求例程13-8死亡狀態(tài)(Dead):當(dāng)線程退出run()方法時(shí),就進(jìn)入死亡狀態(tài),該線程結(jié)束生命周期。例程13-913.4線程調(diào)度線程的調(diào)度是指按照特定的機(jī)制為多個(gè)線程分配CPU的使用權(quán)。兩種調(diào)度模型:分時(shí)調(diào)度模型是指讓所有線程輪流獲得CPU的使用權(quán),并且平均分配每個(gè)線程占用CPU的時(shí)間片。Java虛擬機(jī)采用搶占式調(diào)度模型,是指優(yōu)先讓可運(yùn)行池中優(yōu)先級(jí)高的線程占用CPU,如果可運(yùn)行池中線程的優(yōu)先級(jí)相同,那么就隨機(jī)選擇

8、一個(gè)線程,使其占用CPU。處于運(yùn)行狀態(tài)的線程會(huì)一直運(yùn)行,直至它不得不放棄CPU。一個(gè)線程會(huì)因?yàn)橐韵略蚨艞塁PU:Java虛擬機(jī)讓當(dāng)前

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

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

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(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)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。