




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第8章多線程本章重點(diǎn)線程的創(chuàng)建線程的基本控制方法線程的互斥與同步更多優(yōu)質(zhì)自考資料盡在百度貼吧自考樂園俱樂部()歡迎?加入...歡迎?交流...止不住的驚喜等著你.........2
線程概念什么是線程: 線程就是程序中單獨(dú)順序的流控制。線程本身不能運(yùn)行,它只能用于程序中。3線程概念2.什么是多線程: 多線程則指的是在單個(gè)程序中可以同時(shí)運(yùn)行多個(gè)不同的線程執(zhí)行不同的任務(wù).4線程的生命周期線程的生命周期:一個(gè)線程從創(chuàng)建到死亡的過程。線程的生命周期可分為五個(gè)狀態(tài):創(chuàng)建狀態(tài)就緒狀態(tài)運(yùn)行狀態(tài)阻塞狀態(tài)死亡狀態(tài)5線程的生命周期線程的狀態(tài)轉(zhuǎn)換圖:6線程的生命周期創(chuàng)建狀態(tài)
當(dāng)用new操作符創(chuàng)建一個(gè)新的線程對象時(shí),該線程處于創(chuàng)建狀態(tài)。處于創(chuàng)建狀態(tài)的線程只是一個(gè)空的線程對象,系統(tǒng)不為它分配資源此時(shí)只能調(diào)用start方法啟動(dòng)該線程,調(diào)用其它任何方法都會產(chǎn)生線程非法狀態(tài)異常。7線程的生命周期2.就緒狀態(tài)執(zhí)行線程的start()方法將為線程分配必須的系統(tǒng)資源,安排其運(yùn)行,并調(diào)用線程體—run()方法,這樣就使得該線程處于可運(yùn)行(Runnable)狀態(tài)。這一狀態(tài)并不是運(yùn)行中狀態(tài)(Running),因?yàn)榫€程也許實(shí)際上并未真正運(yùn)行。8線程的生命周期3.運(yùn)行狀態(tài)是某個(gè)就緒狀態(tài)的線程獲得CPU資源,正在運(yùn)行,如果有更高優(yōu)先級的線程進(jìn)入就緒狀態(tài),則該線程就被迫放棄對CPU的控制進(jìn)入就緒狀態(tài),可使用yield()方法主動(dòng)放棄CPU,也可能由于執(zhí)行結(jié)束或執(zhí)行stop()方法進(jìn)入死亡狀態(tài).9線程的生命周期3.阻塞狀態(tài)當(dāng)發(fā)生下列事件時(shí),處于運(yùn)行狀態(tài)的線程會轉(zhuǎn)入到阻塞狀態(tài)。調(diào)用了sleep()方法;線程調(diào)用wait方法所等待的特定條件的滿足線程輸入/輸出阻塞10線程的生命周期從阻塞狀態(tài)恢復(fù)到就緒狀態(tài)三種途徑:處于睡眠狀態(tài)的線程在指定的時(shí)間過去后如果線程在等待某一條件,另一個(gè)對象必須通過notify()或notifyAll()方法通知等待進(jìn)程條件的改變?nèi)绻€程是因?yàn)檩斎?輸出阻塞,輸入/輸出完成11線程的生命周期4.死亡狀態(tài)當(dāng)線程的run方法執(zhí)行結(jié)束后,該線程自然死亡。12線程的實(shí)現(xiàn)在Java中通過run方法為線程指明要完成的任務(wù),有兩種技術(shù)來為線程提供run方法。繼承Thread類并重載run方法。通過定義實(shí)現(xiàn)Runnable接口的類進(jìn)而實(shí)現(xiàn)run方法。13線程的實(shí)現(xiàn)繼承Thread類并重載run方法。
Thread類:是專門用來創(chuàng)建線程和對線程進(jìn)行操作的類。Thread中定義了許多方法對線程進(jìn)行操作。Thread類在缺省情況下run方法是空的。可以通過繼承Thread類并重寫Thread類的run方法實(shí)現(xiàn)用戶線程。14線程的實(shí)現(xiàn)繼承Thread類并重載run方法。總體結(jié)構(gòu)如下:publicclassMyThreadextendsThread{ publicvoidrun(){ …… }}MyThreadt=newMyThread();t.start();15線程的實(shí)現(xiàn)執(zhí)行Runnable接口的類實(shí)現(xiàn)run方法。通過建立一個(gè)實(shí)現(xiàn)了Runnable接口的對象,并以它作為線程的目標(biāo)對象來創(chuàng)建一個(gè)線程。Runnable接口:定義了一個(gè)抽象方法run()。定義如下:publicinterfacejava.lang.Runnable{ publicabstractvoidrun();}16線程的實(shí)現(xiàn)執(zhí)行Runnable接口的類實(shí)現(xiàn)run方法。創(chuàng)建的總體框架如下:classMyRunnerimplementsRunnable{ publicvoidrun(){
…
} }MyRunnerr=newMyRunner();Threadt=newThread(ThreadGroupgroup,Runnabletarget, Stringname);
例如:Threadt=newThread(r,“aa”);17線程的實(shí)現(xiàn)總結(jié):兩種方法均需執(zhí)行線程的start方法為線程分配必須的系統(tǒng)資源、調(diào)度線程運(yùn)行并執(zhí)行線程的run方法。在具體應(yīng)用中,采用哪種方法來構(gòu)造線程體要視情況而定。通常,當(dāng)一個(gè)線程已繼承了另一個(gè)類時(shí),就應(yīng)該用第二種方法來構(gòu)造,即實(shí)現(xiàn)Runnable接口。線程的消亡不能通過調(diào)用一個(gè)stop()命令。而是讓run()方法自然結(jié)束。18線程的優(yōu)先級1.線程的優(yōu)先級及其設(shè)置設(shè)置優(yōu)先級是為了在多線程環(huán)境中便于系統(tǒng)對線程的調(diào)度,優(yōu)先級高的線程將優(yōu)先執(zhí)行一個(gè)線程的優(yōu)先級設(shè)置遵從以下原則:線程創(chuàng)建時(shí),子進(jìn)程繼承父進(jìn)程的優(yōu)先級線程創(chuàng)建后,可通過調(diào)用setPriority()方法改變優(yōu)先級。線程的優(yōu)先級是1-10之間的正整數(shù)。
1-MIN_PRIORITY, 10–MAX_PRIORITY 5-NORM_PRIORITY19線程的優(yōu)先級
線程的調(diào)度策略線程調(diào)度器選擇優(yōu)先級最高的線程運(yùn)行。但是,如果發(fā)生以下情況,就會終止線程的運(yùn)行線程體中調(diào)用了yield()方法,讓出了對CPU的占用權(quán)線程體中調(diào)用了sleep()方法,使線程進(jìn)入睡眠狀態(tài)線程由于I/O操作而受阻塞另一個(gè)更高優(yōu)先級的線程出現(xiàn)。在支持時(shí)間片的系統(tǒng)中,該線程的時(shí)間片用完。20多線程的同步為什么要引入同步機(jī)制 在多線程環(huán)境中,可能會有兩個(gè)甚至更多的線程試圖同時(shí)訪問一個(gè)有限的資源。必須對這種潛在資源沖突進(jìn)行預(yù)防。 解決方法:在線程使用一個(gè)資源時(shí)為其加鎖即可。訪問資源的第一個(gè)線程為其加上鎖以后,其他線程便不能再使用那個(gè)資源,除非被解鎖。21多線程的同步2.怎樣實(shí)現(xiàn)同步 對于訪問某個(gè)關(guān)鍵共享資源的所有方法,都必須把它們設(shè)為synchronized例如:
synchronizedvoidf(){/*...*/}
synchronizedvoidg(){/*...*/}
如果想保護(hù)某些資源不被多個(gè)線程同時(shí)訪問,可以強(qiáng)制通過synchronized方法訪問那些資源。
調(diào)用synchronized方法時(shí),對象就會被鎖定。
22多線程的同步publicclassMyStack{intidx=0;char[]data=newchar[6];
publicsynchronizedvoidpush(charc){data[idx]=c;idx++;}publicsynchronizedcharpop(){idx--;returndata[idx];}
23多線程的同步2.怎樣實(shí)現(xiàn)同步說明:
當(dāng)synchronized方法執(zhí)行完或發(fā)生異常時(shí),會自動(dòng)釋放鎖。被synchronized保護(hù)的數(shù)據(jù)應(yīng)該是私有(private)的。24多線程的同步2.怎樣實(shí)現(xiàn)同步 同步的線程狀態(tài)圖:
25多線程的同步怎樣實(shí)現(xiàn)同步線程間的相互作用:waitandnotifyThepools:WaitpoolLockpool26多線程的同步怎樣實(shí)現(xiàn)同步
具有wait()和notify()的線程狀態(tài)圖:27
線程組1.線程組:所有線程都隸屬于一個(gè)線程組。那可以是一個(gè)默認(rèn)線程組,亦可是一個(gè)創(chuàng)建線程時(shí)明確指定的組。說明:在創(chuàng)建之初,線程被限制到一個(gè)組里,而且不能改變到一個(gè)不同的組。若創(chuàng)建多個(gè)線程而不指定一個(gè)組,它們就會與創(chuàng)建它的線程屬于同一個(gè)組。28線程組例子:publicThread(ThreadGroupgroup,Runnabletarget)publicThread(ThreadGroupgroup,Stringname)publicThread(ThreadGroupgroup,Runnabletarget,Stringname)ThreadGroupmyThreadGroup=newThreadGroup(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中數(shù)學(xué)探索三角形全等的條件2利用ASA和AAS判定全等課件2024-2025學(xué)年北師大版數(shù)學(xué)七年級下冊
- 蒙古族舞蹈的風(fēng)格特點(diǎn)
- 幼兒舞蹈的基本舞姿與基本舞步
- 上海市金山區(qū)九年級歷史下冊 第三單元 兩極下的競爭 第11課 夢幻超級大國教學(xué)設(shè)計(jì) 北師大版
- plc應(yīng)用基礎(chǔ)知識教程
- 2025電力設(shè)施升級改造工程施工合同書范本
- 設(shè)備租賃買賣合同模板
- 2025年供暖系統(tǒng)維護(hù)保養(yǎng)合同范本
- 2025年電子產(chǎn)品供應(yīng)合同
- 銷售合同典范
- 2024年世界職業(yè)院校技能大賽高職組“市政管線(道)數(shù)字化施工組”賽項(xiàng)考試題庫
- 樁基及基坑支護(hù)工程技術(shù)施工方案(三篇)
- 司法考試2024年知識點(diǎn)背誦版-民法
- 2024年耐磨鑄件項(xiàng)目規(guī)劃申請報(bào)告樣文
- 重度哮喘診斷與處理中國專家共識(2024)解讀
- 新能源汽車電控系統(tǒng)的新型傳感器應(yīng)用考核試卷
- 蘇教版數(shù)學(xué)一年級下學(xué)期期中測試卷10套及但
- 2024年全國職業(yè)院校技能大賽高職組(法律實(shí)務(wù)賽項(xiàng))考試題庫(含答案)
- 全過程工程咨詢管理服務(wù)方案投標(biāo)方案(技術(shù)方案)
- 中鐵十五局集團(tuán)安全質(zhì)量部管理制度大全
- 2024老年燒創(chuàng)傷創(chuàng)面MEEK植皮技術(shù)規(guī)范
評論
0/150
提交評論