




已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章多線程,8.1線程的基本概念,什么是線程?線程就是程序中單獨(dú)順序的流控制。線程本身不能運(yùn)行,它只能用于程序中。,線程(thread)就是進(jìn)程中的一個(gè)執(zhí)行線索。Java虛擬機(jī)允許進(jìn)程中同時(shí)執(zhí)行多個(gè)線程。每個(gè)線程都有一個(gè)優(yōu)先級(jí)。具有較高優(yōu)先級(jí)的線程先執(zhí)行。線程是操作系統(tǒng)分配CPU時(shí)間的基本實(shí)體。每一個(gè)應(yīng)用程序至少有一個(gè)線程,也可以擁有多個(gè)線程。線程是程序中的代碼流。多個(gè)線程可以同時(shí)運(yùn)行并能共享資源。線程與進(jìn)程不同,每個(gè)進(jìn)程都需要操作系統(tǒng)為其分配獨(dú)立的地址空間,而同一進(jìn)程中的各個(gè)線程是在同一塊地址空間中工作。在Java程序中,一些動(dòng)態(tài)效果(如動(dòng)畫(huà)的實(shí)現(xiàn)、動(dòng)態(tài)的字幕等)常利用多線程技術(shù)來(lái)實(shí)現(xiàn)。,什么是多線程?多線程則指的是在單個(gè)程序中可以同時(shí)運(yùn)行多個(gè)不同的線程執(zhí)行不同的任務(wù).,8.1.1線程的生命周期,線程的生命周期:一個(gè)線程從創(chuàng)建到死亡的過(guò)程。線程的生命周期可分為五個(gè)狀態(tài):創(chuàng)建狀態(tài)就緒狀態(tài)運(yùn)行狀態(tài)阻塞狀態(tài)死亡狀態(tài),6,線程的生命周期,線程的狀態(tài)轉(zhuǎn)換圖:,7,線程的生命周期,創(chuàng)建狀態(tài)當(dāng)用new操作符創(chuàng)建一個(gè)新的線程對(duì)象時(shí),該線程處于創(chuàng)建狀態(tài)。處于創(chuàng)建狀態(tài)的線程只是一個(gè)空的線程對(duì)象,系統(tǒng)不為它分配資源此時(shí)只能調(diào)用start方法啟動(dòng)該線程,調(diào)用其它任何方法都會(huì)產(chǎn)生線程非法狀態(tài)異常。,8,線程的生命周期,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)行。,9,線程的生命周期,3.運(yùn)行狀態(tài)是某個(gè)就緒狀態(tài)的線程獲得CPU資源,正在運(yùn)行,如果有更高優(yōu)先級(jí)的線程進(jìn)入就緒狀態(tài),則該線程就被迫放棄對(duì)CPU的控制進(jìn)入就緒狀態(tài),可使用yield()方法主動(dòng)放棄CPU,也可能由于執(zhí)行結(jié)束或執(zhí)行stop()方法進(jìn)入死亡狀態(tài).,10,線程的生命周期,4.阻塞狀態(tài)當(dāng)發(fā)生下列事件時(shí),處于運(yùn)行狀態(tài)的線程會(huì)轉(zhuǎn)入到阻塞狀態(tài)。調(diào)用了sleep()方法;線程調(diào)用wait方法所等待的特定條件的滿足線程輸入/輸出阻塞,11,線程的生命周期,從阻塞狀態(tài)恢復(fù)到就緒狀態(tài)三種途徑:處于睡眠狀態(tài)的線程在指定的時(shí)間過(guò)去后如果線程在等待某一條件,另一個(gè)對(duì)象必須通過(guò)notify()或notifyAll()方法通知等待進(jìn)程條件的改變?nèi)绻€程是因?yàn)檩斎?輸出阻塞,輸入/輸出完成,12,8.1.2線程的優(yōu)先級(jí),1.線程的優(yōu)先級(jí)及其設(shè)置設(shè)置優(yōu)先級(jí)是為了在多線程環(huán)境中便于系統(tǒng)對(duì)線程的調(diào)度,優(yōu)先級(jí)高的線程將優(yōu)先執(zhí)行一個(gè)線程的優(yōu)先級(jí)設(shè)置遵從以下原則:線程創(chuàng)建時(shí),子進(jìn)程繼承父進(jìn)程的優(yōu)先級(jí)線程創(chuàng)建后,可通過(guò)調(diào)用setPriority()方法改變優(yōu)先級(jí)。線程的優(yōu)先級(jí)是1-10之間的正整數(shù)。1-MIN_PRIORITY,10MAX_PRIORITY5-NORM_PRIORITY,13,線程的優(yōu)先級(jí),線程的調(diào)度策略線程調(diào)度器選擇優(yōu)先級(jí)最高的線程運(yùn)行。但是,如果發(fā)生以下情況,就會(huì)終止線程的運(yùn)行線程體中調(diào)用了yield()方法,讓出了對(duì)CPU的占用權(quán)線程體中調(diào)用了sleep()方法,使線程進(jìn)入睡眠狀態(tài)線程由于I/O操作而受阻塞另一個(gè)更高優(yōu)先級(jí)的線程出現(xiàn)。在支持時(shí)間片的系統(tǒng)中,該線程的時(shí)間片用完。,14,線程的生命周期,5.死亡狀態(tài)當(dāng)線程的run方法執(zhí)行結(jié)束后,該線程自然死亡。,15,8.2線程的實(shí)現(xiàn),在Java中通過(guò)run方法為線程指明要完成的任務(wù),有兩種技術(shù)來(lái)為線程提供run方法。繼承Thread類并重載run方法。通過(guò)定義實(shí)現(xiàn)Runnable接口的類進(jìn)而實(shí)現(xiàn)run方法。,16,線程的實(shí)現(xiàn),繼承Thread類并重載run方法。Thread類:是專門(mén)用來(lái)創(chuàng)建線程和對(duì)線程進(jìn)行操作的類。Thread中定義了許多方法對(duì)線程進(jìn)行操作。Thread類在缺省情況下run方法是空的??梢酝ㄟ^(guò)繼承Thread類并重寫(xiě)Thread類的run方法實(shí)現(xiàn)用戶線程。,17,線程的實(shí)現(xiàn),繼承Thread類并重載run方法??傮w結(jié)構(gòu)如下:publicclassMyThreadextendsThreadpublicvoidrun()MyThreadt=newMyThread();t.start();,18,線程的實(shí)現(xiàn),執(zhí)行Runnable接口的類實(shí)現(xiàn)run方法。通過(guò)建立一個(gè)實(shí)現(xiàn)了Runnable接口的對(duì)象,并以它作為線程的目標(biāo)對(duì)象來(lái)創(chuàng)建一個(gè)線程。Runnable接口:定義了一個(gè)抽象方法run()。定義如下:publicinterfacejava.lang.Runnablepublicabstractvoidrun();,19,線程的實(shí)現(xiàn),執(zhí)行Runnable接口的類實(shí)現(xiàn)run方法。創(chuàng)建的總體框架如下:classMyRunnerimplementsRunnablepublicvoidrun()MyRunnerr=newMyRunner();Threadt=newThread(r);,20,線程的實(shí)現(xiàn),總結(jié):兩種方法均需執(zhí)行線程的start方法為線程分配必須的系統(tǒng)資源、調(diào)度線程運(yùn)行并執(zhí)行線程的run方法。在具體應(yīng)用中,采用哪種方法來(lái)構(gòu)造線程體要視情況而定。通常,當(dāng)一個(gè)線程已繼承了另一個(gè)類時(shí),就應(yīng)該用第二種方法來(lái)構(gòu)造,即實(shí)現(xiàn)Runnable接口。線程的消亡不能通過(guò)調(diào)用一個(gè)stop()命令。而是讓run()方法自然結(jié)束。,21,8.3多線程的互斥,為什么要引入互斥機(jī)制在多線程環(huán)境中,可能會(huì)有兩個(gè)甚至更多的線程試圖同時(shí)訪問(wèn)一個(gè)有限的資源。必須對(duì)這種潛在資源沖突進(jìn)行預(yù)防。解決方法:在線程使用一個(gè)資源時(shí)為其加鎖即可。訪問(wèn)資源的第一個(gè)線程為其加上鎖以后,其他線程便不能再使用那個(gè)資源,除非被解鎖。,22,多線程的互斥,2.怎樣實(shí)現(xiàn)互斥對(duì)于訪問(wèn)某個(gè)關(guān)鍵共享資源的所有方法,都必須把它們?cè)O(shè)為synchronized例如:synchronizedvoidf()/*.*/synchronizedvoidg()/*.*/如果想保護(hù)某些資源不被多個(gè)線程同時(shí)訪問(wèn),可以強(qiáng)制通過(guò)synchronized方法訪問(wèn)那些資源。調(diào)用synchronized方法時(shí),對(duì)象就會(huì)被鎖定。,23,多線程的互斥,publicclassMyStackintidx=0;chardata=newchar6;publicsynchronizedvoidpush(charc)dataidx=c;idx+;publicsynchronizedcharpop()idx-;returndataidx;,24,多線程的互斥,說(shuō)明:當(dāng)synchronized方法執(zhí)行完或發(fā)生異常時(shí),會(huì)自動(dòng)釋放鎖。被synchronized保護(hù)的數(shù)據(jù)應(yīng)該是私有(private)的。,25,多線程的同步,怎樣實(shí)現(xiàn)同步線程間的相互作用:waitandnotify,26,多線程的同步,wait()和notify()方法:兩個(gè)方法配套使用,wait()使得線程進(jìn)入阻塞狀態(tài),它有兩種形式,一種允許指定以毫秒為單位的一段時(shí)間作為參數(shù),另一種沒(méi)有參數(shù),前者當(dāng)對(duì)應(yīng)的notify()被調(diào)用或者超出指定時(shí)間時(shí)線程重新進(jìn)入可執(zhí)行狀態(tài),后者則必須對(duì)應(yīng)的notify()被調(diào)用。,27,多線程的同步,怎樣實(shí)現(xiàn)同步具有wait()和notify()的線程狀態(tài)圖:,28,多線程的同步,除了notify(),還有一個(gè)方法notifyAll()也可起到類似作用,唯一的區(qū)別在于,調(diào)用notifyAll()方法將把因調(diào)用該對(duì)象的wait()方法而阻塞的所有線程一次性全部解除阻塞。當(dāng)然,只有獲得鎖的
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 跨學(xué)科美術(shù)項(xiàng)目合作計(jì)劃
- 中國(guó)鴉膽子油行業(yè)市場(chǎng)現(xiàn)狀調(diào)查及前景戰(zhàn)略研判報(bào)告
- 建材行業(yè)周轉(zhuǎn)材料管理計(jì)劃
- 辣椒育種項(xiàng)目可行性研究報(bào)告
- 2025年雨水排水管網(wǎng)改造工程可行性研究報(bào)告
- 2025年安徽聯(lián)燦建筑工程有限公司介紹企業(yè)發(fā)展分析報(bào)告
- 酒店公寓項(xiàng)目可行性分析報(bào)告
- 金融行業(yè)安全生產(chǎn)費(fèi)用使用計(jì)劃
- 2024-2025企業(yè)員工崗前安全培訓(xùn)考試試題及參考答案(能力提升)
- 2025年鐵銷(xiāo)濾料行業(yè)深度研究分析報(bào)告
- 安徽省1號(hào)卷A10聯(lián)盟2025屆高三5月最后一卷物理試題及答案
- 2025租賃合同續(xù)簽協(xié)議書(shū)
- 《聚碳酸酯合成》課件
- 3.2基因工程的基本操作程序課件 高二下學(xué)期生物人教版(2019)選擇性必修3
- 23.《海底世界》課件
- 2025年醫(yī)療行業(yè)反壟斷監(jiān)管政策變化與合規(guī)經(jīng)營(yíng)關(guān)鍵指引報(bào)告
- 礦產(chǎn)資源開(kāi)采與銷(xiāo)售協(xié)議
- 《支氣管鏡檢查技術(shù)》課件
- 育肥豬考試試題及答案
- 寫(xiě)作技巧知識(shí)培訓(xùn)課件
- 順豐公司外包協(xié)議合同書(shū)
評(píng)論
0/150
提交評(píng)論