java程序設(shè)計(jì)教程(第2版)機(jī)械工業(yè)出版社 ch07.ppt_第1頁(yè)
java程序設(shè)計(jì)教程(第2版)機(jī)械工業(yè)出版社 ch07.ppt_第2頁(yè)
java程序設(shè)計(jì)教程(第2版)機(jī)械工業(yè)出版社 ch07.ppt_第3頁(yè)
java程序設(shè)計(jì)教程(第2版)機(jī)械工業(yè)出版社 ch07.ppt_第4頁(yè)
java程序設(shè)計(jì)教程(第2版)機(jī)械工業(yè)出版社 ch07.ppt_第5頁(yè)
已閱讀5頁(yè),還剩18頁(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)介

1、第七章 Java的多線程程序設(shè)計(jì),7.1 線程的概念 7.1.1 進(jìn)程和線程 進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序在一個(gè)數(shù)據(jù)集合上的一次動(dòng)態(tài)執(zhí)行過(guò)程。進(jìn)程是存儲(chǔ)器、外設(shè)等資源的分配單位。也是處理器的調(diào)度對(duì)象。 但每個(gè)進(jìn)程有自己獨(dú)立的內(nèi)存空間和資源,進(jìn)程之間不會(huì)共享系統(tǒng)資源。 線程就是比進(jìn)程更小的運(yùn)行單位,一個(gè)進(jìn)程可以被劃分成多個(gè)線程。在一個(gè)支持線程的系統(tǒng)中,線程是處理器的調(diào)度對(duì)象。 一個(gè)進(jìn)程中的線程共享進(jìn)程的資源。線程之間的通信要比進(jìn)程之間的通信方便。,7.1.2線程和多任務(wù)(multi task) 多任務(wù)是指在系統(tǒng)中可以同時(shí)運(yùn)行多個(gè)程序,如果只有一個(gè)處理器,在每一時(shí)刻只有一個(gè)進(jìn)程的一條指令被執(zhí)行

2、??梢允惯@些任務(wù)交替執(zhí)行,由于間隔的時(shí)間短,這些程序看上去好像在同時(shí)運(yùn)行。 如果將進(jìn)程再劃分成進(jìn)線程,每個(gè)線程輪流占用處理器,可以減少并發(fā)控制的時(shí)間 。 windows98/NT/2000操作系統(tǒng)就是將進(jìn)程劃分為線程來(lái)支持多任務(wù)的并發(fā)處理。 7.1.3 Java對(duì)多線程的支持 Java通過(guò)對(duì)Thread類的繼承或?qū)unnable接口的實(shí)現(xiàn),實(shí)現(xiàn)多線程編程。,7.2 線程的創(chuàng)建 為了將進(jìn)程劃分成線程,要在程序中創(chuàng)建多個(gè)線程對(duì)象。 Thread類用來(lái)創(chuàng)建和控制線程。一個(gè)線程要從run方法開(kāi)始執(zhí)行,run方法的聲明在java.lang.Runnable接口中。 每個(gè)程序至少有一個(gè)主線程。,7.2.

3、1 Runnable接口 在Runnable中,只聲明了一個(gè)方法run public void run( ); 已實(shí)現(xiàn)的run方法稱為該對(duì)象的線程體。 在創(chuàng)建并啟動(dòng)了一個(gè)線程后,run方法被系統(tǒng)自動(dòng)調(diào)用。 7.2.2 Thread類 在Thread類中,run方法被實(shí)現(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í)行線體的目標(biāo)對(duì)象,它必須實(shí)現(xiàn) Runnable的run方法; group是線程所屬的線程組的名字。,Thread的成員方法 public fi

5、nal String getName( ) /返回線程名 public final void setName(String name) /將線程的名字設(shè)置為name public void start( ) /啟動(dòng)已創(chuàng)建的線程對(duì)象 public final Boolean isAlive( )/線程是否已啟動(dòng) public final ThreadGroup getThreadGroup( ) /返回線程所屬的線程組 public String toString( ) /以字符串的形式得到線程的 /名字、優(yōu)先級(jí)和所屬的線程組等信息,Thread的靜態(tài)成員方法 public static Thr

6、ead currentThread( ) /返回當(dāng)前正在執(zhí)行的線程對(duì)象 public static int activeCount( ) /返回當(dāng)前線程組的活動(dòng)線程個(gè)數(shù) public static int enumerate( Thread tarray) /將當(dāng)前線程組中的活動(dòng)線程, /包括子線程復(fù)制到數(shù)組tarray中,7.2.3創(chuàng)建線程的方法 繼承Thread方法創(chuàng)建線程 從Thread類派生出子類,在此子類中覆蓋Thread的run方法。 實(shí)現(xiàn)Runnable接口創(chuàng)建線程 創(chuàng)建類實(shí)現(xiàn)接口Runnable的run方法,以此類的對(duì)象為目標(biāo)對(duì)象,創(chuàng)建了線程對(duì)象。,7.3 線程的狀態(tài)與控制 每

7、個(gè)線程都存在一個(gè)從創(chuàng)建、運(yùn)行到消亡的生命周期。 在生命周期中,一個(gè)線程具有創(chuàng)建、可運(yùn)行、運(yùn)行中、阻塞和死亡五種狀態(tài)。 Thread類中的方法可以改變線程的狀態(tài)。,7.3.1線程的狀態(tài) 1. 創(chuàng)建狀態(tài)(new thread) 2. 可運(yùn)行狀態(tài)(runnable) 3. 運(yùn)行中狀態(tài)(running) 4. 阻塞狀態(tài)(Not runnable) 5. 死亡狀態(tài)(dead) 方法isAlive用來(lái)返回線程的狀態(tài)。如果此方法返回true,線程處于、或Not runnable這幾種狀態(tài)之一。如果此方法的返回false,線程處于new thread或dead狀態(tài)。,7.3.2對(duì)線程狀態(tài)的控制 使線程進(jìn)入睡眠

8、的sleep方法 public static void sleep(long millis) throws InterruptedException 其中millis是指定的睡眠時(shí)間。 暫停線程的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)方法 這幾個(gè)方法在java.lang.Object中。 wait方法使當(dāng)前線程進(jìn)入阻塞狀態(tài),notify(notifyall)方法喚醒等待隊(duì)列中的其它線程,使它們進(jìn)入可運(yùn)行狀態(tài),和中斷線程有關(guān)的方法 public void interrupt( ) public void boolean isInterrupted( ) public statick void boolean interrupted( ) 方法interrupt為線程設(shè)置一個(gè)中斷標(biāo)記,當(dāng)run方法運(yùn)行時(shí),用isInterrupted方法檢測(cè)此標(biāo)記。 靜態(tài)

10、方法interrupted檢測(cè)線程是否被中斷,如果是則清除中斷標(biāo)記并返回true。,7.4 線程的優(yōu)先級(jí)和調(diào)度 7.4.1線程的優(yōu)先級(jí) 線程的優(yōu)先級(jí)用整數(shù)110表示。最低和最高的優(yōu)先級(jí)是1和10。默認(rèn)的優(yōu)先級(jí)為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)先級(jí) public final int getPriority(

11、) 方法setPriority用于設(shè)置線程優(yōu)先級(jí): public final setPriority(int newPriority),7.4.2線程的調(diào)度 線程的調(diào)度是負(fù)責(zé)線程排隊(duì)以及CPU在線程之間的分配。被選中的線程獲得處理器進(jìn)入運(yùn)行狀態(tài)。 線程的調(diào)度采用占先原則。 對(duì)于優(yōu)先級(jí)相同的線程,有分時(shí)和獨(dú)占兩種調(diào)度方式。,7.5 線程組 7.5.1線程組 線程組把多個(gè)線程集合為一個(gè)對(duì)象。 java.lang包中的ThreadGroup類實(shí)現(xiàn)了線程組的創(chuàng)建和對(duì)線程組的操作。對(duì)線程組的操作就是對(duì)線程組中的所有線程的操作。 線程組可以形成樹(shù)形結(jié)構(gòu)。在java應(yīng)用程序中,最高層的組就是main線程組。

12、,7.5.2 ThreadGroup類 ThreadGroup的構(gòu)造函數(shù) public ThreadGroup(String name) 創(chuàng)建一個(gè)名字為name的線程組。 public ThreadGroup(ThreadGroup parent,String name) 在線程組parent中創(chuàng)建一個(gè)線程組name。,ThreadGroup的方法 public final String getName( ) 返回線程組的名 public final ThreadGroup getParent( ) 返回線程組的父線程組 public int activeCount( ) 返回當(dāng)前線程組中活動(dòng)

13、線程的個(gè)數(shù) public int enumerate(Thread list ) public int enumerate(ThreadGroup list ) 將當(dāng)前線程組中的活動(dòng)線程復(fù)制到線程數(shù)組或線程組數(shù)組中 public int enumerate(Thread list ,boolean recurse) public int enumerate(ThreadGroup list ,boolean recurse) 將當(dāng)前線程組中的活動(dòng)線程(包括子線程中的)復(fù)制到線程數(shù)組或線程組數(shù)組中,7.6線程的同步 7.6.1線程的同步機(jī)制 當(dāng)多個(gè)線程對(duì)共同的數(shù)據(jù)進(jìn)行操作時(shí)會(huì)產(chǎn)生一些問(wèn)題。 Ja

14、va語(yǔ)言提供了線程的同步控制機(jī)制。 對(duì)共享數(shù)據(jù)的線程的“互斥”鎖定: 對(duì)于共享的數(shù)據(jù)對(duì)象,在任何時(shí)刻只能有一個(gè)線程對(duì)它進(jìn)行操作。這樣可以保證數(shù)據(jù)的完整和一致。 傳送數(shù)據(jù)的線程的同步運(yùn)行: 為了保證傳送的數(shù)據(jù)能及時(shí)正確收到,需要傳送數(shù)據(jù)的線程必須同步運(yùn)行,7.6.2共享數(shù)據(jù)的互斥鎖定 可以用關(guān)鍵字synchronized使一段代碼或一個(gè)方法鎖定一個(gè)對(duì)象。 用synchronized使代碼鎖定對(duì)象的格式如下: synchronized() 用synchronized鎖定方法的格式如下: synchronized 或: synchronized(this) ,7.6.3數(shù)據(jù)傳送時(shí)的同步控制 方法的鎖定并不能保證兩種不同的方法互斥

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論