午夜无码人妻aⅴ大片色欲张津瑜,国产69久久久欧美黑人A片,色妺妺视频网,久久久久国产综合AV天堂

java線程的幾種狀態(tài)是什么?

java線程的5種狀態(tài):1、初始狀態(tài)。2、可運行狀態(tài),位于可運行線程池中,等待被線程調(diào)度選中,獲取cpu的使用權(quán)。3、運行狀態(tài)。4、阻塞狀態(tài),指線程因為某種原因放棄了cpu使用權(quán)。5、死亡狀態(tài),死亡的線程不可再次復(fù)生。

創(chuàng)新互聯(lián)專注于凌源網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供凌源營銷型網(wǎng)站建設(shè),凌源網(wǎng)站制作、凌源網(wǎng)頁設(shè)計、凌源網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造凌源網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供凌源網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

Java中的線程的生命周期大體可分為5種狀態(tài)。

1、初始狀態(tài)(NEW):新創(chuàng)建了一個線程對象。

2、可運行(RUNNABLE):線程對象創(chuàng)建后,其他線程(比如main線程)調(diào)用了該對象的start()方法。該狀態(tài)的線程位于可運行線程池中,等待被線程調(diào)度選中,獲取cpu的使用權(quán) 。

3、運行(RUNNING):可運行狀態(tài)(runnable)的線程獲得了cpu 時間片(timeslice) ,執(zhí)行程序代碼。

4. 阻塞(BLOCKED):阻塞狀態(tài)是指線程因為某種原因放棄了cpu 使用權(quán),也即讓出了cpu timeslice,暫時停止運行。直到線程進入可運行(runnable)狀態(tài),才有機會再次獲得cpu timeslice 轉(zhuǎn)到運行(running)狀態(tài)。阻塞的情況分三種:

(1)、等待阻塞:運行(running)的線程執(zhí)行o.wait()方法,JVM會把該線程放入等待隊列(waitting queue)中。

(2)、同步阻塞:運行(running)的線程在獲取對象的同步鎖時,若該同步鎖被別的線程占用,則JVM會把該線程放入鎖池(lock pool)中。

(3)、其他阻塞:運行(running)的線程執(zhí)行Thread.sleep(long ms)或t.join()方法,或者發(fā)出了I/O請求時,JVM會把該線程置為阻塞狀態(tài)。當sleep()狀態(tài)超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉(zhuǎn)入可運行(runnable)狀態(tài)。

5、死亡(DEAD):線程run()、main() 方法執(zhí)行結(jié)束,或者因異常退出了run()方法,則該線程結(jié)束生命周期。死亡的線程不可再次復(fù)生。

一、線程的狀態(tài)圖

二、初始狀態(tài)

實現(xiàn)Runnable接口和繼承Thread可以得到一個線程類,new一個實例出來,線程就進入了初始狀態(tài)

三、可運行狀態(tài)

1、可運行狀態(tài)只是說你資格運行,調(diào)度程序沒有挑選到你,你就永遠是可運行狀態(tài)。

2、調(diào)用線程的start()方法,此線程進入可運行狀態(tài)。

3、當前線程sleep()方法結(jié)束,其他線程join()結(jié)束,等待用戶輸入完畢,某個線程拿到對象鎖,這些線程也將進入可運行狀態(tài)。

4、當前線程時間片用完了,調(diào)用當前線程的yield()方法,當前線程進入可運行狀態(tài)。

5、鎖池里的線程拿到對象鎖后,進入可運行狀態(tài)。

四、運行狀態(tài)

線程調(diào)度程序從可運行池中選擇一個線程作為當前線程時線程所處的狀態(tài)。這也是線程進入運行狀態(tài)的唯一一種方式。

五、死亡狀態(tài)

1、當線程的run()方法完成時,或者主線程的main()方法完成時,我們就認為它死去。這個線程對象也許是活的,但是,它已經(jīng)不是一個單獨執(zhí)行的線程。線程一旦死亡,就不能復(fù)生。

2、在一個死去的線程上調(diào)用start()方法,會拋出java.lang.IllegalThreadStateException異常。

六、阻塞狀態(tài)

1、當前線程T調(diào)用Thread.sleep()方法,當前線程進入阻塞狀態(tài)。

2、運行在當前線程里的其它線程t2調(diào)用join()方法,當前線程進入阻塞狀態(tài)。

3、等待用戶輸入的時候,當前線程進入阻塞狀態(tài)。

七、等待隊列(本是Object里的方法,但影響了線程)

1、調(diào)用obj的wait(), notify()方法前,必須獲得obj鎖,也就是必須寫在synchronized(obj) 代碼段內(nèi)。

2、與等待隊列相關(guān)的步驟和圖

線程1獲取對象A的鎖,正在使用對象A。

線程1調(diào)用對象A的wait()方法。

線程1釋放對象A的鎖,并馬上進入等待隊列。

鎖池里面的對象爭搶對象A的鎖。

線程5獲得對象A的鎖,進入synchronized塊,使用對象A。

線程5調(diào)用對象A的notifyAll()方法,喚醒所有線程,所有線程進入鎖池。||||| 線程5調(diào)用對象A的notify()方法,喚醒一個線程,不知道會喚醒誰,被喚醒的那個線程進入鎖池。

notifyAll()方法所在synchronized結(jié)束,線程5釋放對象A的鎖。

鎖池里面的線程爭搶對象鎖,但線程1什么時候能搶到就不知道了。||||| 原本鎖池+第6步被喚醒的線程一起爭搶對象鎖。

八、鎖池狀態(tài)

當前線程想調(diào)用對象A的同步方法時,發(fā)現(xiàn)對象A的鎖被別的線程占有,此時當前線程進入鎖池狀態(tài)。簡言之,鎖池里面放的都是想爭奪對象鎖的線程。

當一個線程1被另外一個線程2喚醒時,1線程進入鎖池狀態(tài),去爭奪對象鎖。

鎖池是在同步的環(huán)境下才有的概念,一個對象對應(yīng)一個鎖池。

九、幾個方法的比較

Thread.sleep(long millis),一定是當前線程調(diào)用此方法,當前線程進入阻塞,但不釋放對象鎖,millis后線程自動蘇醒進入可運行狀態(tài)。作用:給其它線程執(zhí)行機會的方式。

Thread.yield(),一定是當前線程調(diào)用此方法,當前線程放棄獲取的cpu時間片,由運行狀態(tài)變會可運行狀態(tài),讓OS再次選擇線程。作用:讓相同優(yōu)先級的線程輪流執(zhí)行,但并不保證一定會輪流執(zhí)行。實際中無法保證yield()達到讓步目的,因為讓步的線程還有可能被線程調(diào)度程序再次選中。Thread.yield()不會導(dǎo)致阻塞。

t.join()/t.join(long millis),當前線程里調(diào)用其它線程1的join方法,當前線程阻塞,但不釋放對象鎖,直到線程1執(zhí)行完畢或者millis時間到,當前線程進入可運行狀態(tài)。

obj.wait(),當前線程調(diào)用對象的wait()方法,當前線程釋放對象鎖,進入等待隊列。依靠notify()/notifyAll()喚醒或者wait(long timeout)timeout時間到自動喚醒。

obj.notify()喚醒在此對象監(jiān)視器上等待的單個線程,選擇是任意性的。notifyAll()喚醒在此對象監(jiān)視器上等待的所有線程。

推薦教程:《java教程》

網(wǎng)站名稱:java線程的幾種狀態(tài)是什么?
URL分享:http://www.ekvhdxd.cn/article16/cpoodg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、網(wǎng)站內(nèi)鏈、響應(yīng)式網(wǎng)站、動態(tài)網(wǎng)站營銷型網(wǎng)站建設(shè)、標簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司