




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java語(yǔ)言程序設(shè)計(jì)天津理工大學(xué)計(jì)算機(jī)與通信工程學(xué)院主講教師:李雙喜
2023/1/5第8章線程第2頁(yè)第8章線程2023/1/5第8章線程第3頁(yè)引言publicclassQ1{publicstaticvoidmain(String[]args){
while(true){System.out.println(“123”);}
while(true){System.out.println(“abc”);}}}如果需要完成一些同時(shí)動(dòng)作呢?目前開發(fā)的程序只有一條從頭到尾的執(zhí)行線索現(xiàn)實(shí)世界中的許多過(guò)程都需要同時(shí)動(dòng)作!2023/1/5第8章線程第4頁(yè)主要內(nèi)容基本概念進(jìn)程進(jìn)程調(diào)度線程Java中創(chuàng)建多線程的兩種方法:自定義Thread類的子類自定義類實(shí)現(xiàn)Runnable接口線程的方法線程優(yōu)先級(jí)線程同步2023/1/5第8章線程第5頁(yè)進(jìn)程和進(jìn)程調(diào)度進(jìn)程的概念進(jìn)程(process)是在一個(gè)數(shù)據(jù)集合上的 一次動(dòng)態(tài)的執(zhí)行過(guò)程,資源分配的基本單位進(jìn)程的描述PCB(包括CPU寄存器現(xiàn)場(chǎng)值等)數(shù)據(jù)段(進(jìn)程中用到的全局變量、 局部變量值)代碼段(進(jìn)程執(zhí)行的代碼)PCB數(shù)據(jù)代碼進(jìn)程是OS中最重要的概念2023/1/5第8章線程第6頁(yè)進(jìn)程上下文(processcontext)是對(duì)進(jìn)程執(zhí)行活動(dòng)全過(guò)程的靜態(tài)描述,它由代碼段、寄存器內(nèi)容及與該進(jìn)程相關(guān)的核心數(shù)據(jù)結(jié)構(gòu)組成可唯一代表一個(gè)進(jìn)程,進(jìn)程執(zhí)行是在其上下文中進(jìn)行的進(jìn)程調(diào)度(processscheduling)多個(gè)進(jìn)程在調(diào)度算法的控制下并發(fā)執(zhí)行叫進(jìn)程調(diào)度進(jìn)程調(diào)度必定產(chǎn)生新舊進(jìn)程上下文的切換,即用新進(jìn)程的PCB、代碼段、數(shù)據(jù)段取代舊進(jìn)程2023/1/5第8章線程第7頁(yè)進(jìn)程的三種基本狀態(tài)就緒態(tài)當(dāng)一個(gè)進(jìn)程已獲得除CPU外的所有資源,只要分配處理機(jī)就可執(zhí)行同時(shí)可能有多個(gè)進(jìn)程處于就緒態(tài),它們被存儲(chǔ)在就緒隊(duì)列中“萬(wàn)事具備,只欠CPU”運(yùn)行態(tài)進(jìn)程占有處理機(jī)執(zhí)行阻塞態(tài)正處于運(yùn)行態(tài)的進(jìn)程等待某個(gè)條件(如I/O操作、進(jìn)程同步),在條件到來(lái)之前無(wú)法繼續(xù)執(zhí)行,這時(shí),進(jìn)程由運(yùn)行態(tài)進(jìn)入阻塞態(tài),排到阻塞隊(duì)列中去2023/1/5第8章線程第8頁(yè)進(jìn)程的調(diào)度策略進(jìn)程調(diào)度策略時(shí)間片輪轉(zhuǎn)(R.R.)調(diào)度:分配給每個(gè)進(jìn)程固定的時(shí)間配額,超時(shí)返回就緒隊(duì)列隊(duì)尾,等待下一輪調(diào)度。保證所有進(jìn)程的運(yùn)行機(jī)會(huì)均等優(yōu)先級(jí)調(diào)度:當(dāng)優(yōu)先級(jí)高的進(jìn)程進(jìn)入就緒隊(duì)列時(shí),強(qiáng)占優(yōu)先級(jí)低的進(jìn)程的處理機(jī)。優(yōu)先級(jí)低的進(jìn)程返回就緒隊(duì)列隊(duì)首等待。保證迫切的進(jìn)程先執(zhí)行以上調(diào)度策略是當(dāng)前OS普遍采用的調(diào)度策略2023/1/5第8章線程第9頁(yè)線程線程的概念進(jìn)程調(diào)度涉及進(jìn)程上下文的切換進(jìn)程上下文的切換涉及新舊兩個(gè)進(jìn)程CPU寄存器現(xiàn)場(chǎng)值、數(shù)據(jù)內(nèi)存、代碼內(nèi)存的切換和過(guò)渡這是一個(gè)很耗時(shí)的工作把一個(gè)進(jìn)程進(jìn)一步細(xì)分為多個(gè)線程,這些線程共享該進(jìn)程的數(shù)據(jù)和代碼,只是它們有各自的CPU寄存器現(xiàn)場(chǎng)值,保存在TCB中線程間的切換只涉及CPU寄存器現(xiàn)場(chǎng)值的切換,不涉及內(nèi)存的切換,切換效率大大提高線程是一個(gè)動(dòng)態(tài)的執(zhí)行過(guò)程,進(jìn)程仍然是資源分配的基本單位2023/1/5第8章線程第10頁(yè)程序、進(jìn)程與線程的關(guān)系:程序是一段靜態(tài)的代碼,它是應(yīng)用軟件執(zhí)行的藍(lán)本。進(jìn)程是程序的一次動(dòng)態(tài)執(zhí)行過(guò)程,它對(duì)應(yīng)了從代碼加載、執(zhí)行至執(zhí)行完畢的一個(gè)完整過(guò)程,這個(gè)過(guò)程也是進(jìn)程本身從產(chǎn)生、發(fā)展至消亡的過(guò)程。線程是比進(jìn)程更小的執(zhí)行單位。一個(gè)進(jìn)程在其執(zhí)行過(guò)程中,可以產(chǎn)生多個(gè)線程,形成多條執(zhí)行線索,每條線索,即每個(gè)線程也有它自身的產(chǎn)生、存在和消亡的過(guò)程,也是一個(gè)動(dòng)態(tài)的概念。2023/1/5第8章線程第11頁(yè)Java中的多線程處理:1)Java應(yīng)用程序總是從主類的main方法開始執(zhí)行。JVM加載代碼發(fā)現(xiàn)main后,就會(huì)啟動(dòng)一個(gè)主線程,該線程負(fù)責(zé)執(zhí)行main方法;2)若main方法中沒有創(chuàng)建其他線程,則main方法執(zhí)行完最后一個(gè)語(yǔ)句,JVM即結(jié)束Java應(yīng)用程序;3)若main方法中創(chuàng)建其他線程,則JVM在主線程和其他線程之間輪流切換,保證每個(gè)線程都有機(jī)會(huì)使用CPU資源;main方法即使執(zhí)行完最后語(yǔ)句,JVM也要等所有線程都結(jié)束才結(jié)束整個(gè)Java程序。2023/1/5第8章線程第12頁(yè)Java中線程的生命周期:(1)新建線程有了相應(yīng)內(nèi)存空間和其他資源(2)運(yùn)行線程調(diào)用start()方法(從父類繼承的方法)通知JVM,JVM知道新線程排隊(duì)等候切換;當(dāng)此線程獲得CPU使用權(quán)后,執(zhí)行線程的run()方法進(jìn)行動(dòng)作2023/1/5第8章線程第13頁(yè)(3)中斷(原因有4)1)線程調(diào)度:JVM將CPU資源從當(dāng)前線程切換給其他線程,本線程讓出CPU的使用權(quán)2)睡眠:線程使用CPU資源期間,執(zhí)行了sleep(intmillsecond)方法,使當(dāng)前線程進(jìn)入休眠狀態(tài),讓出CPU的使用權(quán),經(jīng)過(guò)millsecond時(shí)間后,該線程就重新進(jìn)到線程隊(duì)列中排隊(duì)等待CPU資源,以便從中斷處繼續(xù)運(yùn)行。
2023/1/5第8章線程第14頁(yè)3)等待:線程執(zhí)行wait()方法,等待狀態(tài)的線程不會(huì)主動(dòng)進(jìn)到線程隊(duì)列中排隊(duì)等待CPU資源,必須由其他線程調(diào)用notify()方法通知它,使得它重新進(jìn)到線程隊(duì)列中排隊(duì)等待CPU資源,以便從中斷處繼續(xù)運(yùn)行。4)阻塞:線程使用CPU資源期間,執(zhí)行某個(gè)操作進(jìn)入阻塞狀態(tài),比如執(zhí)行讀/寫操作引起阻塞。進(jìn)入阻塞狀態(tài)時(shí)線程不能進(jìn)入排隊(duì)隊(duì)列,只有當(dāng)引起阻塞的原因消除時(shí),線程才重新進(jìn)到線程隊(duì)列中排隊(duì)等待CPU資源,以便從原來(lái)中斷處開始繼續(xù)運(yùn)行。2023/1/5第8章線程第15頁(yè)(4)死亡
所謂死亡狀態(tài)就是線程釋放了實(shí)體,即釋放分配給線程對(duì)象的內(nèi)存。正常結(jié)束:線程執(zhí)行完run方法中的全部語(yǔ)句非正常結(jié)束:強(qiáng)制run方法結(jié)束。2023/1/5第8章線程第16頁(yè)線程的狀態(tài)ReadyRunningBlockedSleepingWaitingstartissueI/OrequestwaitnotifynotifyAlltimeoutexpiresinterruptthreaddispatch
(assignaprocessor)quantumexpirationyieldsleepcompletesleepintervalexpiresinterruptBornentersynchronizedstatementI/Ocompletesacquirelockinterrupt當(dāng)線程結(jié)束時(shí)(從run方法返回),它就進(jìn)入Dead
狀態(tài)(顯示為牛眼)preemptionJava線程狀態(tài)轉(zhuǎn)換圖2023/1/5第8章線程第17頁(yè)創(chuàng)建線程之一:自定義Thread子類Thread類的構(gòu)造方法publicThread()publicThread(Runnabletarget)publicThread(Stringname)覆蓋Thread類的run方法,當(dāng)該線程處于運(yùn)行態(tài)時(shí),就執(zhí)行run方法的內(nèi)容main方法也是一個(gè)獨(dú)立運(yùn)行的線程2023/1/5第8章線程第18頁(yè)創(chuàng)建線程之一:自定義Thread子類publicclassExample8_1{publicstaticvoidmain(Stringargs[]){
WriteWordThreadzhang,wang;zhang=newWriteWordThread("張小紅");//新建線程
wang=newWriteWordThread("JamsKeven");//新建線程
zhang.start();//啟動(dòng)線程
for(inti=1;i<=8;i++){System.out.println("我是主線程中的語(yǔ)句");}
wang.start();//啟動(dòng)線程
}}classWriteWordThreadextendsThread{//Thread的子類負(fù)責(zé)創(chuàng)建線程對(duì)象
WriteWordThread(Strings){setName(s);//調(diào)用Thread類的setName方法為線程起個(gè)名字
}
publicvoidrun(){for(inti=1;i<=8;i++){System.out.println("我是一個(gè)線程,我的名字是"+getName());}}}2023/1/5第8章線程第19頁(yè)publicclassExample8_2{publicstaticvoidmain(Stringargs[]){
WriteWordThreadzhang,wang;zhang=newWriteWordThread("張小紅",200);//新建線程
wang=newWriteWordThread("JamsKeven",100);//新建線程
zhang.start();//啟動(dòng)線程
wang.start();//啟動(dòng)線程
}}classWriteWordThreadextendsThread{intn=0;
WriteWordThread(Strings,intn){setName(s);//調(diào)用Thread類的方法setName為線程起個(gè)名字
this.n=n;}
publicvoidrun(){for(inti=1;i<=8;i++){System.out.println("我是一個(gè)線程,我的名字是"+getName());try{sleep(n);}catch(InterruptedExceptione){}}}}2023/1/5第8章線程第20頁(yè)創(chuàng)建線程之二:自定義類實(shí)現(xiàn)Runnable接口Runnable接口中只有一個(gè)run方法publicabstractvoidrun();實(shí)現(xiàn)Runnable接口的run方法,當(dāng)該線程處于運(yùn)行態(tài)時(shí),就執(zhí)行run方法的內(nèi)容線程類可以繼承別的父類一個(gè)多線程編程環(huán)境允許創(chuàng)建基于同一個(gè)Runnable對(duì)象的多個(gè)線程2023/1/5第8章線程第21頁(yè)publicclassExample8_4{publicstaticvoidmain(Stringargs[]){Strings1="會(huì)計(jì)",s2="出納";
Bankbank=newBank(s1,s2);
Threadzhang,cheng;zhang=newThread(bank);cheng=newThread(bank);//cheng和zhang是同一目標(biāo)對(duì)象
zhang.setName(s1);cheng.setName(s2);bank.setMoney(120);//線程的目標(biāo)對(duì)象修改被線程共享的money
zhang.start();cheng.start();}}2023/1/5第8章線程第22頁(yè)classBankimplementsRunnable{//Bank類必須實(shí)現(xiàn)Runnable接口
privateintmoney=0;Stringname1,name2;Bank(Strings1,Strings2){name1=s1;name2=s2;}publicvoidsetMoney(intmount){money=mount;}
2023/1/5第8章線程第23頁(yè)publicvoidrun(){//接口中的方法
while(true){money=money-10;
if(Thread.currentThread().getName().equals(name1)){System.out.println("我是"+name1+"現(xiàn)在有"+money+"元");if(money<=100){System.out.println(name1+"進(jìn)入死亡狀態(tài)");return;//如果money小于100,當(dāng)前線程結(jié)束run方法
}
}elseif(Thread.currentThread().getName().equals(name2)){System.out.println("我是"+name2+"現(xiàn)在有"+money+"元");if(money<=60){System.out.println(name2+"進(jìn)入死亡狀態(tài)");return;//如果money小于100,當(dāng)前線程結(jié)束run方法
}}try{Thread.sleep(800);}catch(InterruptedExceptione){}}}}
2023/1/5第8章線程第24頁(yè)線程類Thread的方法:publicvoidstart();publicvoidrun();publicstaticThreadcurrentThread();publicstaticvoidyield();publicstaticvoidsleep(longmillis)throwsInterruptedException;publicfinalvoidsetPriority(intnewPriority);//優(yōu)先級(jí)1~10publicfinalintgetPriority();publicfinalvoidsetName(Stringname);publicfinalStringgetName();publicfinalvoidjoin()throwsInterruptedException2023/1/5第8章線程第25頁(yè)線程的優(yōu)先級(jí)Priority9Priority8Priority7Priority10Priority6Priority5Priority4Priority3Priority2Priority1ABDCEFGHIJKReadythreadsThread.MIN_PRIORITYThread.MAX_PRIORITYThread.NORM_PRIORITY2023/1/5第8章線程第26頁(yè)線程的互斥和同步線程的互斥臨界資源(criticalresources)多個(gè)并發(fā)線程不允許同時(shí)訪問(wèn)的資源如內(nèi)存緩沖區(qū)、打印緩沖區(qū)等臨界區(qū)(criticalsections)訪問(wèn)臨界資源的代碼段多個(gè)并發(fā)線程不能同時(shí)進(jìn)入臨界區(qū)多個(gè)并發(fā)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年硫代硫酸鹽項(xiàng)目建議書
- 2025年度地下車位租賃與車位產(chǎn)權(quán)交易合同
- 2025年度地下室租賃及倉(cāng)儲(chǔ)服務(wù)協(xié)議
- 2025年度手車買賣與品牌授權(quán)及推廣合同
- 2025年度動(dòng)產(chǎn)拍賣議價(jià)與知識(shí)產(chǎn)權(quán)保護(hù)合同
- 2025年度商標(biāo)同授權(quán)及知識(shí)產(chǎn)權(quán)運(yùn)營(yíng)合同
- 《第12課 編碼長(zhǎng)度與信息量》教學(xué)設(shè)計(jì)教學(xué)反思-2023-2024學(xué)年小學(xué)信息技術(shù)浙教版2023四年級(jí)上冊(cè)
- 12 《論語(yǔ)》十二章2024-2025學(xué)年新教材七年級(jí)上冊(cè)語(yǔ)文新教學(xué)設(shè)計(jì)(統(tǒng)編版2024)
- 2025年冷芯盒樹脂項(xiàng)目合作計(jì)劃書
- 我國(guó)高凈值人群反逃避稅問(wèn)題研究
- 環(huán)境與可持續(xù)發(fā)展ppt課件(完整版)
- Linux操作系統(tǒng)課件(完整版)
- 跨境電商亞馬遜運(yùn)營(yíng)實(shí)務(wù)完整版ppt課件-整套課件-最全教學(xué)教程
- 浙美版小學(xué)六年級(jí)美術(shù)下冊(cè)全冊(cè)精品必備教學(xué)課件
- DB32∕T 4245-2022 城鎮(zhèn)供水廠生物活性炭失效判別和更換標(biāo)準(zhǔn)
- 建設(shè)工程圍擋標(biāo)準(zhǔn)化管理圖集(2022年版)
- 人教版七年級(jí)上冊(cè)歷史課程綱要
- 濕法冶金簡(jiǎn)介
- 2022新教科版六年級(jí)科學(xué)下冊(cè)全一冊(cè)全部教案(共28節(jié))
- 班主任培訓(xùn)-家校溝通課件
- 機(jī)器視覺論文英文
評(píng)論
0/150
提交評(píng)論