国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java多線程開發系列之三:線程這一輩子(線程的生命周期)

2019-11-14 23:00:23
字體:
來源:轉載
供稿:網友
java多線程開發系列之三:線程這一輩子(線程的生命周期)

前文中已經提到了,關于多線程的基礎知識和多線程的創建。但是如果想要很好的管理多線程,一定要對線程的生命周期有一個整體概念。本節即對線程的一生進行介紹,讓大家對線程的各個時段的狀態有一定了解。


線程的一生的狀態過程

如下圖:

線程會由出生 到運行 再到 死亡。在前文中曾經講到過(尋找前文請點這里):java中各個線程是搶占式的:cpu一般不會為一個線程從出生一直服務到老,各個線程總是爭搶的希望得到cpu的“青睞”。當某個線程發生阻塞時,那么cpu就會被其他線程迅速搶占。而當前阻塞的線程只能變為就緒狀態,等待cpu下次的“垂青”。這里有句老話挺符合的:機會總是留給有準備的人的(當前處于就緒狀態的),如果你還沒準備好(阻塞),機會就轉瞬即逝了(轉向其他線程了)。所以如上圖所示:(防盜連接:本文首發自王若伊_恩賜解脫http://m.survivalescaperooms.com/jilodream/ ) 線程在出生后(被new出來以后)即為新建狀態,此時jvm會為其分配內存、初始化字段,僅此。然后進入就緒狀態(執行Start方法)開始排隊,緊接著當cpu開始執行(搶占到資源)該線程,線程進入運行狀態,接著由于某種原因需要等待(如睡眠,等待需要調用的資源(如被其它資源占用,或者開啟需要準備時間))而被迫進入阻塞狀態。待等待結束后(睡眠時間到后、等待資源被釋放)線程會再次進入就緒狀態,等待著cpu的再次垂青。于此同時如果運行狀態中的線程由于cpu調度的問題,而失去運行權利后也會被變為就緒狀態,等待cpu的再次降臨。當運行中的線程執行完線程體中的任務后、或者由于某種異常而掛起后,該線程就會進入死亡狀態。
狀態跳轉詳解:在上圖中各個步驟(途中數字)代表的情況
新建New---->就緒Runnable運行Start()方法
就緒Runnable---->運行Running獲得cpu資源
運行Running---->阻塞Blocked

進入睡眠、

被掛起、

等待其他資源、

等待某個通知(后文會講到)、

等待某個IO資源

阻塞Blocked---->就緒Runnable

睡眠時間到、

掛起后被重新恢復、

等待資源已經被釋放、

獲取到其他線程的通知(后文會講到)、

IO方法已經返回

運行Running---->就緒Runnable

處理器放棄當前線程,處理其他線程去了

運行Running---->死亡Dead

當前線程的執行體已經被運行結束、

當前線程拋出了無法解決的異?;蝈e誤


其它一些需要注意的地方:

(1)線程啟動后,并不會立刻運行,具體運行時間要看虛擬機的調度(前文中有講)

(2)線程一旦死亡就不能再重新啟動就緒(使用Start方法),如果強制啟動會拋出異常。

(3)想判斷當前的線程是否已經被啟動并且還未死亡(就緒、運行、阻塞),可以使用isAlive()方法判斷

(4)啟動線程進入就緒狀態請務必使用Start()方法啟動,而非Run方法,原因在創建多線程時也曾經講過。

(5)線程一旦啟動,大家都是獨立的處理,并不會因為父線程(創建并啟動子線程的線程)出現某種狀態,而影響到自身(如父線程死亡后,子線程仍然會繼續運行)。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德州市| 综艺| 平原县| 汤阴县| 盱眙县| 陈巴尔虎旗| 灵川县| 邯郸县| 无为县| 昌江| 临沂市| 大洼县| 揭西县| 高州市| 桐乡市| 罗源县| 田林县| 盐边县| 丰县| 龙山县| 大田县| 黔西县| 剑川县| 普兰县| 遂溪县| 张家界市| 稷山县| 虹口区| 和静县| 凤山县| 宣城市| 盈江县| 昌宁县| 肃宁县| 太仓市| 黄陵县| 宜良县| 营口市| 黄冈市| 富裕县| 新巴尔虎右旗|