![java程序設(shè)計教程(第2版)機械工業(yè)出版社 ch07.ppt_第1頁](http://file1.renrendoc.com/fileroot2/2020-1/11/256824e7-898d-4ce6-a867-a4cfc6c12f7a/256824e7-898d-4ce6-a867-a4cfc6c12f7a1.gif)
![java程序設(shè)計教程(第2版)機械工業(yè)出版社 ch07.ppt_第2頁](http://file1.renrendoc.com/fileroot2/2020-1/11/256824e7-898d-4ce6-a867-a4cfc6c12f7a/256824e7-898d-4ce6-a867-a4cfc6c12f7a2.gif)
![java程序設(shè)計教程(第2版)機械工業(yè)出版社 ch07.ppt_第3頁](http://file1.renrendoc.com/fileroot2/2020-1/11/256824e7-898d-4ce6-a867-a4cfc6c12f7a/256824e7-898d-4ce6-a867-a4cfc6c12f7a3.gif)
![java程序設(shè)計教程(第2版)機械工業(yè)出版社 ch07.ppt_第4頁](http://file1.renrendoc.com/fileroot2/2020-1/11/256824e7-898d-4ce6-a867-a4cfc6c12f7a/256824e7-898d-4ce6-a867-a4cfc6c12f7a4.gif)
![java程序設(shè)計教程(第2版)機械工業(yè)出版社 ch07.ppt_第5頁](http://file1.renrendoc.com/fileroot2/2020-1/11/256824e7-898d-4ce6-a867-a4cfc6c12f7a/256824e7-898d-4ce6-a867-a4cfc6c12f7a5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第七章 Java的多線程程序設(shè)計,7.1 線程的概念 7.1.1 進程和線程 進程是一個具有一定獨立功能的程序在一個數(shù)據(jù)集合上的一次動態(tài)執(zhí)行過程。進程是存儲器、外設(shè)等資源的分配單位。也是處理器的調(diào)度對象。 但每個進程有自己獨立的內(nèi)存空間和資源,進程之間不會共享系統(tǒng)資源。 線程就是比進程更小的運行單位,一個進程可以被劃分成多個線程。在一個支持線程的系統(tǒng)中,線程是處理器的調(diào)度對象。 一個進程中的線程共享進程的資源。線程之間的通信要比進程之間的通信方便。,7.1.2線程和多任務(wù)(multi task) 多任務(wù)是指在系統(tǒng)中可以同時運行多個程序,如果只有一個處理器,在每一時刻只有一個進程的一條指令被執(zhí)行
2、??梢允惯@些任務(wù)交替執(zhí)行,由于間隔的時間短,這些程序看上去好像在同時運行。 如果將進程再劃分成進線程,每個線程輪流占用處理器,可以減少并發(fā)控制的時間 。 windows98/NT/2000操作系統(tǒng)就是將進程劃分為線程來支持多任務(wù)的并發(fā)處理。 7.1.3 Java對多線程的支持 Java通過對Thread類的繼承或?qū)unnable接口的實現(xiàn),實現(xiàn)多線程編程。,7.2 線程的創(chuàng)建 為了將進程劃分成線程,要在程序中創(chuàng)建多個線程對象。 Thread類用來創(chuàng)建和控制線程。一個線程要從run方法開始執(zhí)行,run方法的聲明在java.lang.Runnable接口中。 每個程序至少有一個主線程。,7.2.
3、1 Runnable接口 在Runnable中,只聲明了一個方法run public void run( ); 已實現(xiàn)的run方法稱為該對象的線程體。 在創(chuàng)建并啟動了一個線程后,run方法被系統(tǒng)自動調(diào)用。 7.2.2 Thread類 在Thread類中,run方法被實現(xiàn)為空方法。Thread類的聲明格式如下: public class Thread extends Object implements Runnable Thread中的方法如下:,構(gòu)造方法 public Thread( ); public Thread(String name) public Thread(Runnale tar
4、get) public Thread(Runnable target, String name) public Thread(ThreadGroup group, Runnable target) public Thread(ThreadGroup group, String name) public Thread(ThreadGroup group, Runnable target, String name) 其中:name是線程名; target是執(zhí)行線體的目標對象,它必須實現(xiàn) Runnable的run方法; group是線程所屬的線程組的名字。,Thread的成員方法 public fi
5、nal String getName( ) /返回線程名 public final void setName(String name) /將線程的名字設(shè)置為name public void start( ) /啟動已創(chuàng)建的線程對象 public final Boolean isAlive( )/線程是否已啟動 public final ThreadGroup getThreadGroup( ) /返回線程所屬的線程組 public String toString( ) /以字符串的形式得到線程的 /名字、優(yōu)先級和所屬的線程組等信息,Thread的靜態(tài)成員方法 public static Thr
6、ead currentThread( ) /返回當前正在執(zhí)行的線程對象 public static int activeCount( ) /返回當前線程組的活動線程個數(shù) public static int enumerate( Thread tarray) /將當前線程組中的活動線程, /包括子線程復(fù)制到數(shù)組tarray中,7.2.3創(chuàng)建線程的方法 繼承Thread方法創(chuàng)建線程 從Thread類派生出子類,在此子類中覆蓋Thread的run方法。 實現(xiàn)Runnable接口創(chuàng)建線程 創(chuàng)建類實現(xiàn)接口Runnable的run方法,以此類的對象為目標對象,創(chuàng)建了線程對象。,7.3 線程的狀態(tài)與控制 每
7、個線程都存在一個從創(chuàng)建、運行到消亡的生命周期。 在生命周期中,一個線程具有創(chuàng)建、可運行、運行中、阻塞和死亡五種狀態(tài)。 Thread類中的方法可以改變線程的狀態(tài)。,7.3.1線程的狀態(tài) 1. 創(chuàng)建狀態(tài)(new thread) 2. 可運行狀態(tài)(runnable) 3. 運行中狀態(tài)(running) 4. 阻塞狀態(tài)(Not runnable) 5. 死亡狀態(tài)(dead) 方法isAlive用來返回線程的狀態(tài)。如果此方法返回true,線程處于、或Not runnable這幾種狀態(tài)之一。如果此方法的返回false,線程處于new thread或dead狀態(tài)。,7.3.2對線程狀態(tài)的控制 使線程進入睡眠
8、的sleep方法 public static void sleep(long millis) throws InterruptedException 其中millis是指定的睡眠時間。 暫停線程的yield方法 public static void yield( ) yield方法暫停線程的執(zhí)行。 join方法 public final void join( ) throws InterruptedException public final void join(long millis) throws InterruptedException join方法使本線程暫停執(zhí)行,直到調(diào)用該方法的線程
9、執(zhí)行結(jié)束后再繼續(xù)執(zhí)行本線程。,wait和notify(notifyall)方法 這幾個方法在java.lang.Object中。 wait方法使當前線程進入阻塞狀態(tài),notify(notifyall)方法喚醒等待隊列中的其它線程,使它們進入可運行狀態(tài),和中斷線程有關(guān)的方法 public void interrupt( ) public void boolean isInterrupted( ) public statick void boolean interrupted( ) 方法interrupt為線程設(shè)置一個中斷標記,當run方法運行時,用isInterrupted方法檢測此標記。 靜態(tài)
10、方法interrupted檢測線程是否被中斷,如果是則清除中斷標記并返回true。,7.4 線程的優(yōu)先級和調(diào)度 7.4.1線程的優(yōu)先級 線程的優(yōu)先級用整數(shù)110表示。最低和最高的優(yōu)先級是1和10。默認的優(yōu)先級為5。也可用Thread類的公用靜態(tài)常量表示。 public static final int NORM_PRIORITY=5 public static final int MIN_PRIORITY=1 public static final int MAX_PRIORITY=10 方法getPriority用于獲得線程優(yōu)先級 public final int getPriority(
11、) 方法setPriority用于設(shè)置線程優(yōu)先級: public final setPriority(int newPriority),7.4.2線程的調(diào)度 線程的調(diào)度是負責線程排隊以及CPU在線程之間的分配。被選中的線程獲得處理器進入運行狀態(tài)。 線程的調(diào)度采用占先原則。 對于優(yōu)先級相同的線程,有分時和獨占兩種調(diào)度方式。,7.5 線程組 7.5.1線程組 線程組把多個線程集合為一個對象。 java.lang包中的ThreadGroup類實現(xiàn)了線程組的創(chuàng)建和對線程組的操作。對線程組的操作就是對線程組中的所有線程的操作。 線程組可以形成樹形結(jié)構(gòu)。在java應(yīng)用程序中,最高層的組就是main線程組。
12、,7.5.2 ThreadGroup類 ThreadGroup的構(gòu)造函數(shù) public ThreadGroup(String name) 創(chuàng)建一個名字為name的線程組。 public ThreadGroup(ThreadGroup parent,String name) 在線程組parent中創(chuàng)建一個線程組name。,ThreadGroup的方法 public final String getName( ) 返回線程組的名 public final ThreadGroup getParent( ) 返回線程組的父線程組 public int activeCount( ) 返回當前線程組中活動
13、線程的個數(shù) public int enumerate(Thread list ) public int enumerate(ThreadGroup list ) 將當前線程組中的活動線程復(fù)制到線程數(shù)組或線程組數(shù)組中 public int enumerate(Thread list ,boolean recurse) public int enumerate(ThreadGroup list ,boolean recurse) 將當前線程組中的活動線程(包括子線程中的)復(fù)制到線程數(shù)組或線程組數(shù)組中,7.6線程的同步 7.6.1線程的同步機制 當多個線程對共同的數(shù)據(jù)進行操作時會產(chǎn)生一些問題。 Ja
14、va語言提供了線程的同步控制機制。 對共享數(shù)據(jù)的線程的“互斥”鎖定: 對于共享的數(shù)據(jù)對象,在任何時刻只能有一個線程對它進行操作。這樣可以保證數(shù)據(jù)的完整和一致。 傳送數(shù)據(jù)的線程的同步運行: 為了保證傳送的數(shù)據(jù)能及時正確收到,需要傳送數(shù)據(jù)的線程必須同步運行,7.6.2共享數(shù)據(jù)的互斥鎖定 可以用關(guān)鍵字synchronized使一段代碼或一個方法鎖定一個對象。 用synchronized使代碼鎖定對象的格式如下: synchronized() 用synchronized鎖定方法的格式如下: synchronized 或: synchronized(this) ,7.6.3數(shù)據(jù)傳送時的同步控制 方法的鎖定并不能保證兩種不同的方法互斥
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版八年級地理上冊2.2《氣候》聽課評課記錄2
- 人教部編版歷史八年級下冊:第8課《經(jīng)濟體制改革》聽課評課記錄2
- 2022版新課標七年級上冊道德與法治第七課親情之愛3課時聽課評課記錄
- 聽評課記錄表1年級
- 北師大版歷史八年級上冊第7課《義和團抗擊八國聯(lián)軍》聽課評課記錄
- 魯教版數(shù)學七年級上冊1.2《圖形的全等》聽評課記錄
- 湘教版數(shù)學八年級上冊《2.2 命題與證明》聽評課記錄
- 小學二年級乘法口算練習題
- 五年級分數(shù)乘法口算題卡
- 人教版七年級道德與法治七年級上冊聽課評課記錄:第四單元 生命的思考第十課《綻放生命之花》第二課時活出生命的精彩
- 危險化學品目錄2023
- TSXDZ 052-2020 煤礦礦圖管理辦法
- GB/T 7631.18-2017潤滑劑、工業(yè)用油和有關(guān)產(chǎn)品(L類)的分類第18部分:Y組(其他應(yīng)用)
- 2022年第六屆【普譯獎】全國大學生英語翻譯大賽
- GB/T 14258-2003信息技術(shù)自動識別與數(shù)據(jù)采集技術(shù)條碼符號印制質(zhì)量的檢驗
- 政府資金項目(榮譽)申報獎勵辦法
- 最新如何進行隔代教育專業(yè)知識講座課件
- 當前警察職務(wù)犯罪的特征、原因及防范,司法制度論文
- 奧特萊斯專題報告(經(jīng)典)-課件
- 《新制度經(jīng)濟學》配套教學課件
- 計算機文化基礎(chǔ)單元設(shè)計-windows
評論
0/150
提交評論