




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
9多線程程序設(shè)計9.1引例:簡單的多線程程序9.2線程概述9.3Java線程類和接口9.4線程調(diào)度與控制9.5線程的同步機制9.6應(yīng)用實例:定時器9.1引例:簡單的多線程程序【例9-1】簡單的多線程程序FirstThread.java必須通過用戶強制中斷的方式才能結(jié)束,即MS-DOS方式下按Ctrl-C鍵,Eclipse平臺下通過停止運行按鈕9.2線程概述進程與線程多任務(wù)分時環(huán)境9.2線程概述多進程并發(fā)處理9.2線程概述多線程并發(fā)處理9.2線程概述Java程序運行在JVM下對于操作系統(tǒng)來說,JVM是系統(tǒng)中運行的眾多進程之一每個運行在JVM下的Java程序都是JVM進程中的線程例如,執(zhí)行Java應(yīng)用程序會首先調(diào)用main()方法,此時生成一個被稱為主線程的線程,主線程結(jié)束意味著main()方法運行結(jié)束9.2線程概述Java的程序是單線程的,但它提供了類和接口來實現(xiàn)多線程程序java.lang包中的Thread類和Runnable接口9.3Java線程類和接口9.3.1Thread類9.3.2Runnable接口9.3.1Thread類將類聲明為Thread類的子類可以使Java程序能夠多線程運行該子類必須覆蓋Thread類的run()方法,將所有多線程代碼放在run()方法中例如:publicclassMyThreadextendsThread{ ... publicvoidrun(){ ... }}9.3.1Thread類Thread類常用構(gòu)造方法9.3.1Thread類Thread類常用成員方法9.3.1Thread類9.3.1Thread類【例9-2】可以和用戶交互的多線程程序MyThread.java,MyThreadTest.java9.3.2Runnable接口Java只支持單重繼承如果一個類繼承了Thread類,就不能再繼承其他類了對此,Java提供了另一種途經(jīng),通過實現(xiàn)Runnable接口來定義多線程類9.3.2Runnable接口Runnable接口中僅聲明了run()方法:voidrun();實現(xiàn)Runnable接口的類必須實現(xiàn)run()方法,例如:publicclassMyRunnableimplementsRunnable{ publicvoidrun(){...}}Thread類就實現(xiàn)了Runnable接口,只不過run()方法體是空的9.3.2Runnable接口實現(xiàn)了Runnable接口的對象創(chuàng)立線程時,需要用它作為參數(shù)創(chuàng)立一個Thread類對象,之后如一般的Thread對象那樣調(diào)用start()方法啟動線程執(zhí)行run()方法例如:MyRunnabler=newMyRunnable();Threadt=newThread(r);t.start();9.3.2Runnable接口【例9-3】使用Runnable接口的多線程程序MyRunnable.java,MyRunnableTest.java9.4線程調(diào)度與控制9.4.1線程狀態(tài)9.4.2線程調(diào)度9.4.3線程控制9.4.1線程狀態(tài)線程不同狀態(tài)之間的轉(zhuǎn)換9.4.2線程調(diào)度處于就緒狀態(tài)的線程自動獲得一個反映線程重要或緊急程度的優(yōu)先級,并按照優(yōu)先級排隊等待CPU資源Java中,JVM負責(zé)線程的調(diào)度,在優(yōu)先級的根底上依據(jù)“先到先效勞”的原那么為各線程分配CPU使用權(quán)如果有更高優(yōu)先級的線程進入就緒狀態(tài),該線程將搶占低優(yōu)先級線程所使用的CPU9.4.2線程調(diào)度獲得CPU使用權(quán)的線程在出現(xiàn)以下情況之一時讓出CPU:JVM強制線程放棄CPU,如CPU時間到、有更高優(yōu)先級線程進入就緒狀態(tài)因某種原因?qū)е戮€程不能再繼續(xù)運行下去,如等待輸入輸出、休眠、等待消息等run()方法執(zhí)行結(jié)束,或被強行退出9.4.2線程調(diào)度JVM進行線程調(diào)度,主要依據(jù)優(yōu)先級Java線程的優(yōu)先級從1到10,其中10的優(yōu)先級最高Thread類定義了三個靜態(tài)int型常量MAX_PRIORITY、MIN_PRIORITY和NORM_PRIORITY分別表示優(yōu)先級10、1和5,默認是59.4.2線程調(diào)度Thread類的setPriority()和getPriority()方法分別用來設(shè)置和獲取線程的優(yōu)先級:publicfinalvoidsetPriority(intnewPriority)publicfinalintgetPriority()9.4.3線程控制線程休眠:publicstaticvoidsleep(longmillis)throwsInterruptedException讓出CPU時間:publicstaticvoidyield()9.4.3線程控制等待其他線程結(jié)束publicfinalvoidjoin()throwsInterruptedExceptionpublicfinalvoidjoin(longmillis)throwsInterruptedException9.4.3線程控制守護線程:publicfinalvoidsetDaemon(booleanon)publicfinalbooleanisDaemon()9.5線程的同步機制9.5.1共享資源9.5.2線程同步9.5.3線程通信9.5.1共享資源【例9-4】多線程訪問共享資源SharedData.java,SharedDataTest.java如果不希望程序運行中的情況發(fā)生,需要引入線程同步機制,即各線程依照一定的規(guī)那么訪問共享資源9.5.2線程同步實現(xiàn)線程同步使用synchronized關(guān)鍵字synchronized有兩種用法:同步方法和同步代碼塊聲明了synchronized的方法或代碼塊任何時候都只能有一個線程在運行9.5.2線程同步同步方法:synchronized方法聲明{ //方法體}【例9-5】線程同步實現(xiàn)數(shù)據(jù)共享SharedDataSync.java,SharedDataSyncTest.java9.5.2線程同步同步代碼塊:synchronized(obj){ //同步代碼}obj是某個對象,進入同步代碼塊的線程必須先獲得obj的鎖9.5.2線程同步注意實現(xiàn)線程同步時,必須使用同一個對象鎖如果obj是this,那么與同步方法效果相同,因為this就是當前對象本身使用同步代碼塊時,不能用方法內(nèi)的局部變量來做對象鎖9.5.2線程同步同步方法和同步代碼塊的區(qū)別:前者同步的代碼范圍大于后者同步的代碼范圍,更容易引起死鎖,還會降低系統(tǒng)的運行效率通常來說,同步的代碼范圍越小越好,因此盡管同步方法簡單,但更好的方法是使用同步代碼塊9.5.3線程通信Object類定義的wait()、notify()和notifyAll()方法為同步操作的不同線程提供了一種通信手段所有類都繼承了這些方法9.5.3線程通信wait()方法令當前線程轉(zhuǎn)為阻塞狀態(tài),釋放對象鎖,并在其他線程調(diào)用notify()方法或notifyAll()方法后,由阻塞狀態(tài)轉(zhuǎn)為就緒狀態(tài)publicfinalvoidwait()throwsInterruptedExceptionpublicfinalvoidwait(longtimeout)throwsInterruptedException9.5.3線程通信notify()方法用于喚醒當前對象的一個等待線程,使它由阻塞狀態(tài)轉(zhuǎn)為就緒狀態(tài)publicfinalvoidnotify()notifyAll()方法用于喚醒當前對象的所有滿足被喚醒條件的等待線程publicfinalvoidnotifyAl
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度黑龍江省高校教師資格證之高等教育法規(guī)通關(guān)題庫(附帶答案)
- 6.2《五石之瓠》課件 統(tǒng)編版高中語文選擇性必修上冊
- 消防設(shè)施改造方案試題及答案
- 難題解析的證券從業(yè)資格考試試題及答案
- (高清版)DB12∕T 505-2014 玉米轉(zhuǎn)基因成分篩查方法
- (高清版)DB12∕T 598.3-2015 天津市建設(shè)項目用地控制指標 第3部分:衛(wèi)生系統(tǒng)項目
- 號碼使用權(quán)轉(zhuǎn)讓協(xié)議 (2025年版)
- 思政理論重點難點試題及答案
- 2025年塞克硝唑藥物合作協(xié)議書
- 2025年專賣店店面出租合同
- 甜菜栽培技術(shù)
- 機動車檢測站應(yīng)急預(yù)案
- 電動單梁橋式起重機起重機械檢查維護記錄表
- 廣東省簡介PPT-廣東省PPT介紹
- 農(nóng)村人居環(huán)境整治文明積分制試點方案
- 一滴血檢測技術(shù)
- 法理斗爭課件
- 彩虹小學(xué)集體備課記錄表
- YY/T 1543-2017鼻氧管
- GB/T 7113.4-2011絕緣軟管第4部分:丙烯酸酯玻璃纖維軟管
- GB/T 18487.1-2015電動汽車傳導(dǎo)充電系統(tǒng)第1部分:通用要求
評論
0/150
提交評論