Java程序設(shè)計(jì):030902_線程常用操作方法_第1頁
Java程序設(shè)計(jì):030902_線程常用操作方法_第2頁
Java程序設(shè)計(jì):030902_線程常用操作方法_第3頁
Java程序設(shè)計(jì):030902_線程常用操作方法_第4頁
Java程序設(shè)計(jì):030902_線程常用操作方法_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 MLDN 軟件教學(xué)研發(fā)部軟件教學(xué)研發(fā)部JAVA 應(yīng)用開發(fā)詳解應(yīng)用開發(fā)詳解多線程 線程常用操作方法本章目標(biāo) 了解設(shè)置和取得線程名稱 了解線程的強(qiáng)制運(yùn)行 了解線程的休眠 了解線程的禮讓 了解線程的中斷操作線程操作的主要方法 No.方法名稱方法名稱類型類型描述描述1public Thread(Runnable target)構(gòu)造接收Runnable接口子類對象,實(shí)例化Thread對象2public Thread(Runnable target,String name)構(gòu)造接收Runnable接口子類對象,實(shí)例化Thread對象,并設(shè)置線程名稱3public Thread(String name)構(gòu)

2、造實(shí)例化Thread對象,并設(shè)置線程名稱4public static Thread currentThread()普通返回目前正在執(zhí)行的線程5public final String getName()普通返回線程的名稱6public final int getPriority()普通發(fā)揮線程的優(yōu)先級7public boolean isInterrupted()普通判斷目前線程是否被中斷,如果是,返回true,否則返回false8public final boolean isAlive()普通判斷線程是否在活動(dòng),如果是,返回true,否則返回false9public final void joi

3、n() throws InterruptedException普通等待線程死亡10public final synchronized void join(long millis) throws InterruptedException普通等待millis毫秒后,線程死亡11public void run()普通執(zhí)行線程12public final void setName(String name)普通設(shè)定線程名稱13public final void setPriority(int newPriority)普通設(shè)定線程的優(yōu)先值14public static void sleep(long mi

4、llis) throws InterruptedException普通使目前正在執(zhí)行的線程休眠millis毫秒15public void start()普通開始執(zhí)行線程16public static void yield()普通將目前正在執(zhí)行的線程暫停,允許其它線程執(zhí)行17public final void setDaemon(boolean on)普通將一個(gè)線程設(shè)置成后臺(tái)運(yùn)行18public final void setPriority(int newPriority)普通更改線程的優(yōu)先級取得和設(shè)置線程名稱 在Thread類中,可以通過getName()方法取得線程的名稱,通過setName

5、()方法設(shè)置線程的名稱。 線程的名稱一般在啟動(dòng)線程前設(shè)置,但也允許為已經(jīng)運(yùn)行的線程設(shè)置名稱。允許兩個(gè)Thread對象有相同的名字,但為了清晰,應(yīng)該盡量避免這種情況的發(fā)生。 另外,如果程序并沒有為線程指定名稱,則系統(tǒng)會(huì)自動(dòng)的為線程分配一個(gè)名稱。設(shè)置和取得線程的名字 class MyThread implements Runnable/ 實(shí)現(xiàn)Runnable接口public void run()/ 覆寫接口中的run()方法for(int i=0;i3;i+)/ 循環(huán)輸出3次System.out.println(Thread.currentThread().getName()+ 運(yùn)行, i = +

6、 i) ;/ 取得當(dāng)前線程的名字;public class ThreadNameDemo public static void main(String args) MyThread my = new MyThread() ;/ 定義Runnable子類對象new Thread(my).start() ;/ 系統(tǒng)自動(dòng)設(shè)置線程名稱new Thread(my,線程-A).start() ;/ 手工設(shè)置線程名稱new Thread(my,線程-B).start() ;/ 手工設(shè)置線程名稱new Thread(my).start() ;/ 系統(tǒng)自動(dòng)設(shè)置線程名稱new Thread(my).start()

7、 ;/ 系統(tǒng)自動(dòng)設(shè)置線程名稱;程序說明 從運(yùn)行結(jié)果中發(fā)現(xiàn)沒有設(shè)置線程名稱的其余三個(gè)線程對象的名字都是很有規(guī)律的:Thread-0、Thread-1、Thread-2,從之前講解的static關(guān)鍵字可以知道,在Thread類中必然存在一個(gè)static類型的屬性,用于為線程自動(dòng)命名。 觀察程序的輸出 class MyThread implements Runnable/ 實(shí)現(xiàn)Runnable接口public void run()/ 覆寫接口中的run()方法for(int i=0;i3;i+)/ 循環(huán)輸出3次System.out.println(Thread.currentThread().get

8、Name()+ 運(yùn)行, i = + i) ;/ 取得當(dāng)前線程的名字;public class CurrentThreadDemo public static void main(String args) MyThread my = new MyThread() ;/ 定義Runnable子類對象new Thread(my,線程).start() ;/ 啟動(dòng)線程my.run() ; / 直接調(diào)用run方法;判斷線程是否啟動(dòng) 通過Thread類之中的start()方法通知CPU這個(gè)線程已經(jīng)準(zhǔn)備好啟動(dòng),之后就等待分配CPU資源,運(yùn)行此線程了。那么如何判斷一個(gè)線程是否已經(jīng)啟動(dòng)了呢?在Java中可以使用

9、isAlive()方法來測試線程是否已經(jīng)啟動(dòng)而且仍然在啟動(dòng)。 判斷線程是否啟動(dòng) class MyThread implements Runnable / 實(shí)現(xiàn)Runnable接口public void run() / 覆寫run()方法for (int i = 0; i + i);/ 取得當(dāng)前線程名稱;public class ThreadAliveDemo public static void main(String args) MyThread mt = new MyThread();/ 實(shí)例化對象Thread t = new Thread(mt, 線程);/ 實(shí)例化Thread對象Sys

10、tem.out.println(線程開始執(zhí)行之前 - + t.isAlive();/ 判斷是否啟動(dòng)t.start();/ 啟動(dòng)線程System.out.println(線程開始執(zhí)行之后 - + t.isAlive();/ 判斷是否啟動(dòng)for (int i = 0; i + i);/ 輸出System.out.println(代碼執(zhí)行之后 - + t.isAlive();/ 后面的輸出結(jié)果不確定;線程的強(qiáng)制運(yùn)行 在線程操作中,可以使用join()方法讓一個(gè)線程強(qiáng)制運(yùn)行,線程強(qiáng)制運(yùn)行期間,其他線程無法運(yùn)行,必須等待此線程完成之后才可以繼續(xù)執(zhí)行。 線程的強(qiáng)制運(yùn)行 class MyThread imp

11、lements Runnable / 實(shí)現(xiàn)Runnable接口public void run() / 覆寫run()方法for (int i = 0; i + i);/ 輸出線程名稱;public class ThreadJoinDemo public static void main(String args) MyThread mt = new MyThread();/ 實(shí)例化對象Thread t = new Thread(mt, 線程);/ 實(shí)例化Thread對象t.start();/ 線程啟動(dòng)for (int i = 0; i 10) / 判斷變量內(nèi)容try t.join(); / 線程

12、t進(jìn)行強(qiáng)制運(yùn)行 catch (Exception e) / 需要進(jìn)行異常處理System.out.println(Main 線程運(yùn)行 - + i);線程的休眠 在程序中允許一個(gè)線程進(jìn)行暫時(shí)的休眠,直接使用Thread.sleep()方法即可。 線程的休眠 class MyThread implements Runnable / 實(shí)現(xiàn)Runnable接口public void run() / 覆寫run()方法for (int i = 0; i 5; i+) / 循環(huán)5次try Thread.sleep(500);/ 線程休眠 catch (Exception e) / 需要異常處理System

13、.out.println(Thread.currentThread().getName() + 運(yùn)行, i = + i);/ 輸出線程名稱;public class ThreadSleepDemo public static void main(String args) MyThread mt = new MyThread();/ 實(shí)例化對象new Thread(mt, 線程).start();/ 啟動(dòng)線程;中斷線程 當(dāng)一個(gè)線程運(yùn)行的時(shí)候,另外一個(gè)線程可以直接通過interrupt()方法,中斷其運(yùn)行狀態(tài)。 線程的中斷 class MyThread implements Runnable /

14、實(shí)現(xiàn)Runnable接口public void run() / 覆寫run()方法System.out.println(1、進(jìn)入run方法);try Thread.sleep(10000);/ 休眠10秒System.out.println(2、已經(jīng)完成休眠); catch (Exception e) System.out.println(3、休眠被終止);return;/ 讓程序返回被調(diào)用處System.out.println(4、run方法正常結(jié)束);public class ThreadInterruptDemo public static void main(String args)

15、MyThread mt = new MyThread();/ 實(shí)例化子類對象Thread t = new Thread(mt, 線程);/ 實(shí)例化線程對象t.start();try Thread.sleep(2000);/ 稍微停2秒再繼續(xù)中斷 catch (Exception e) errupt();/ 中斷線程執(zhí)行;后臺(tái)線程 在Java程序中,只要前臺(tái)有一個(gè)線程在運(yùn)行,則整個(gè)java進(jìn)程都不會(huì)消失,所以此時(shí)可以設(shè)置一個(gè)后臺(tái)線程,這樣即使Java進(jìn)程結(jié)束了,此后臺(tái)線程依然會(huì)繼續(xù)執(zhí)行。要想實(shí)現(xiàn)這樣的操作,直接使用setDaemon()方法即可。 后臺(tái)線程的設(shè)置 class MyThr

16、ead implements Runnable / 實(shí)現(xiàn)Runnable接口public void run() / 覆寫run()方法while (true) / 無限制循環(huán)System.out.println(Thread.currentThread().getName() + 在運(yùn)行。);/ 輸出線程名稱;public class ThreadDaemonDemo public static void main(String args) MyThread mt = new MyThread();/ 實(shí)例化線程對象Thread t = new Thread(mt, 線程);/ 實(shí)例化Thre

17、ad類對象t.setDaemon(true) ;/ 此線程在后臺(tái)運(yùn)行t.start();/ 啟動(dòng)線程;線程的優(yōu)先級 在Java的線程操作中,所有的線程在運(yùn)行前都會(huì)保持在就緒狀態(tài),那么此時(shí),那個(gè)線程的優(yōu)先級高,那個(gè)線程就有可能會(huì)先被執(zhí)行。線程優(yōu)先級 在Java的線程中使用setPriority()方法可以設(shè)置一個(gè)線程的優(yōu)先級,在Java的線程中一共有以下三種優(yōu)先級 No.定義定義描述描述表示的常量表示的常量1public static final int MIN_PRIORITY最低優(yōu)先級12public static final int NORM_PRIORITY中等優(yōu)先級,是線程的默認(rèn)優(yōu)先級

18、53public static final int MAX_PRIORITY最高優(yōu)先級10測試線程優(yōu)先級 class MyThread implements Runnable / 實(shí)現(xiàn)Runnable接口public void run() / 覆寫run()方法for (int i = 0; i 5; i+) / 循環(huán)5次try Thread.sleep(500);/ 線程休眠 catch (Exception e) / 需要異常處理System.out.println(Thread.currentThread().getName() + 運(yùn)行, i = + i);/ 輸出線程名稱;publi

19、c class ThreadPriorityDemo public static void main(String args) Thread t1 = new Thread(new MyThread(),線程A);/ 實(shí)例化線程對象Thread t2 = new Thread(new MyThread(),線程B);/ 實(shí)例化線程對象Thread t3 = new Thread(new MyThread(),線程C);/ 實(shí)例化線程對象t1.setPriority(Thread.MIN_PRIORITY) ;/ 設(shè)置線程優(yōu)先級為最低t2.setPriority(Thread.MAX_PRIORITY) ;/ 設(shè)置線程優(yōu)先級為最高t3.setPriority(Thread.NORM_PRIORITY) ;/ 設(shè)置線程優(yōu)先級為中等t1.start() ;/ 啟動(dòng)線程t2.start() ;/ 啟動(dòng)線程t3.start() ;/ 啟動(dòng)線程主方法的優(yōu)先級是NORM_PRIORITYpublic class MainPriorityDemo public static void main(Strin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論