java核心技術(shù)第46講線程的屬性_第1頁
java核心技術(shù)第46講線程的屬性_第2頁
java核心技術(shù)第46講線程的屬性_第3頁
java核心技術(shù)第46講線程的屬性_第4頁
java核心技術(shù)第46講線程的屬性_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

主題:線程的生命周期

-Java核心技術(shù)-什么是線程的生命周期?線程的生命周期是指一個線程從產(chǎn)生到消亡的發(fā)展過程。在這個過程中,每一個時刻都是線程生命周期的一個階段。我們把線程生命周期的不同階段稱作線程的不同狀態(tài)。線程的五種狀態(tài)創(chuàng)建(new)可運行(runnable)或就緒狀態(tài)運行中(running)不可運行(notrunnable)或阻塞(blocked)狀態(tài)

死亡(dead)線程的生命周期狀態(tài)圖創(chuàng)建狀態(tài)(new)線程已創(chuàng)建但并未啟動publicstaticvoidmain(String[]args){

MyThreadta=newMyThread();

}可運行狀態(tài)(Runnable)線程已具備除CPU運行時間以外的其它各種所需資源,但尚未運行,或者稱為就緒態(tài)。

publicstaticvoidmain(String[]args){

MyThreadta=newMyThread();

ta.start();

}運行狀態(tài)(Running)線程已是真正擁有CPU使用權(quán)的線程,執(zhí)行線程對象的run()方法publicstaticvoidmain(String[]args){

MyThreadta=newMyThread();

ta.start();

Thread.sleep();

}不可運行狀態(tài)(notRunnable)因為某種原因使得線程處于無法運行的狀態(tài)。處于阻塞狀態(tài)的線程即使擁有CPU使用時間也無法運行。死亡狀態(tài)(Dead)線程結(jié)束其生命周期,進入無法再次運行的狀態(tài)線程狀態(tài)的枚舉值Thread.State類中的各狀態(tài)值狀態(tài)值含義NEW處于創(chuàng)建狀態(tài)的線程RUNNABLE處于可運行狀態(tài)的線程BLCOKED處于不可運行狀態(tài)(阻塞狀態(tài))的線程WAITTING被其他線程用wait方法阻塞的線程,或使用join方法后進入的狀態(tài)TIMED_WAITTING計時等待TERMINATED處于死亡狀態(tài)的線程輸出線程的三種典型狀態(tài)publicstaticvoidmain(String[]args){try{ MyThreadta=newMyThread();//創(chuàng)建一個新線程

System.out.println("MainThreadPrint:"+ta.getState()); ta.start();//啟動新線程

System.out.println("MainThreadPrint:"+ta.getState()); ta.join();//等待新創(chuàng)建的新線程死亡

System.out.println("MainThreadPrint:"+ta.getState());}catch(Exceptione){ e.printStackTrace();//打印出錯信息

}}線程的調(diào)度的方法Thread類中的方法startrunyieldsleepjoinisAlivesuspendresumestopObject類中的方法waitnotifynotifyAll線程的調(diào)度publicstaticvoidmain(String[]args){

try{ MyThreadmt=newMyThread();//創(chuàng)建一個新線程對象

mt.start();//啟動新線程

while(true){ System.out.println("MainThreadisRunning"); Thread.sleep(250);//休眠0.25秒

}}catch(InterruptedExceptionie){ ie.printStackTrace();//打印出錯信息

}}小結(jié)什么是線程的生命周期?線程的生命周期有哪幾種狀態(tài)?請列舉引起線程狀態(tài)轉(zhuǎn)換的幾個常用方法?作業(yè)創(chuàng)建一個具有2個線程的多線程程序,使用線程調(diào)度函數(shù),使2個兩個線程交替輸出5次各自的線程名。其輸出結(jié)果應(yīng)如圖所示。主題:線程的優(yōu)先級

-Java核心技術(shù)-優(yōu)先級優(yōu)先級在多線程系統(tǒng)中,每個線程都被賦予一個執(zhí)行優(yōu)先級。優(yōu)先級決定了線程被CPU執(zhí)行的優(yōu)先次序。如果線程的優(yōu)先級完全相等,就按照“先到先服務(wù)”的原則進行調(diào)度。Java語言中優(yōu)先級的范圍在Thread.MIN_PRIORITY(1)-Thread.MAX_PRIORITY(10)之間。默認的優(yōu)先級為Thread.NORM_PRIORITY(5).新建線程的優(yōu)先級(1)繼承創(chuàng)建它的父線程的優(yōu)先級。(2)通過調(diào)用Thread類的setPriority(inta)方法來設(shè)置線程的優(yōu)先級。getPriority()能返回線程當(dāng)前的優(yōu)先級級別。線程的優(yōu)先級控制線程運行publicstaticvoidmain(String[]args){

MyThreadmta=newMyThread("ThreadA");//創(chuàng)建線程Amta.setPriority(Thread.MIN_PRIORITY);mta.start();

MyThreadmtb=newMyThread("ThreadB");//創(chuàng)建線程Bmtb.setPriority(Thread.NORM_PRIORITY);mtb.start();

MyThreadmtc=newMyThread("ThreadC");//創(chuàng)建線程Cmtc.setPriority(Thread.MAX_PRIORITY);mtc.start();

}線程的優(yōu)先級控制線程運行classMyThreadextendsThread{ privateStringname;//線程名

publicMyThread(Stringname){ =name; }publicvoidrun(){for(inti=0;i<3;i++){System.out.println(+"優(yōu)先級是"+this.getPriority());try{ this.sleep(100);//設(shè)定休眠時間

}catch(InterruptedExceptionie){ ie.printStackTrace(); }}}}小結(jié)線程優(yōu)先級的主要用途是什么?Java中線程的優(yōu)先級有幾級?如何設(shè)置和獲取線程的優(yōu)先級?主題:線程組

-Java核心技術(shù)-什么是線程組?線程組:提供了一個統(tǒng)一管理多個線程而不需單獨管理的機制。當(dāng)多個線程分為一組時,可以用一個方法啟動或掛起線程組中的所有線程

java.lang.ThreadGroup類來支持線程組的實現(xiàn)線程組的組成ThreadGroup類的構(gòu)造方法構(gòu)造方法publicThreadGroup(Stringname)publicThreadGroup(ThreadGroupparent,Stringname)父線程組的名稱線程組名稱ThreadGroup類的常用方法publicStringgetName()

//返回當(dāng)前線程組名publicintactiveCount()

//獲得本組活動線程的數(shù)目publicThreadGroupgetParent()

//得到當(dāng)前線程組的父線程組publicvoidinterrupt()

//中斷線程組中所有線程及其子線程組中所有線程publicintenumerate(Thread[]list) //將本組活動線程拷貝到數(shù)組list中線程組控制publicstaticvoidlistCurrentThreads(){ThreadGroupcurGroup=Thread.currentThread().getThreadGroup();intnumThreads=curGroup.activeCount();System.out.println("當(dāng)前線程組共有線程:"+numThreads);Thread[]listOfThreads=newThread[numThreads];curGroup.enumerate(listOfThreads);//輸出每個線程的名字

for(inti=0;i<numThreads;i++){ System.out.println(“第”+i+“個線程:"+listOfThreads[i].getName()); }}小結(jié)什么是線程組?線程組有什么作用?如何實現(xiàn)建立和訪問線程組?主題:守護線程-Java核心技術(shù)-守護線程守護線程(DaemonThreads)也稱后臺線程,是指在程序運行的時候在后臺提供一種通用服務(wù)的線程。這種線程并不屬于程序中不可或缺的部分,也就是說守護線程不會阻止程序的終止。當(dāng)所有的非后臺線程結(jié)束時,守護線程也就終止了。Thread類的守護線程的方法publicfinalbooleanisDaemon()

//判斷一個線程是否是守護線程publicfinalvoidsetDaemon(boolean

on)

//將一個線程設(shè)為守護線程必須在start()方法之前設(shè)置

線程組控制classMyThreadextendsThread{ publicMyThread(){

this.setDaemon(true);//將線程設(shè)為守護線程

this.start();//啟動線程

}……}小結(jié)什么是守護線程?如何設(shè)置線程為守護線程?作業(yè)判斷下面說明是否正確?為什么?①如果線程處于死亡狀態(tài),則它不是Runnable線程②在Java中,較高優(yōu)先級的Runnable線程應(yīng)搶在較低優(yōu)先級線程的前面執(zhí)行③在線程休眠時,sleep方法不會占用處理器時間④yield方法將導(dǎo)致線程進入不可運行狀態(tài)⑤一個線程不通過start方法也可以進入可運行狀態(tài)⑥守護線程會阻止程序的終止主題:守護線程-Java核心技術(shù)-守護線程守護線程(DaemonThreads)也稱后臺線程,是指在程序運行的時候在后臺提供一種通用服務(wù)的線程。這種線程并不屬于程序中不可或缺的部分,也就是說守護線程不會阻止程序的終止。當(dāng)所有的非后臺線程結(jié)束時,守護線程也就終止了。Thread類的守護線程的方法publicfinalbooleanisDaemon()

//判斷一個線程是否是守護線程publicfinalvoidsetDaemon(boolean

on)

//將一個線程設(shè)為守護線程必須在start()方法之前設(shè)置

線程組控制classMyThreadextendsThread{ publicMyThread(){

this.setDaemon(true);

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論