【Java】【多執行緒】執行緒的生命週期
轉載:https://blog.csdn.net/miss_dongangel/article/details/51195337
非常全面
1、新建狀態
用繼承Thread類或實現Runable介面或其他方法建立一個執行緒物件後,該執行緒物件就處於新生狀態。處於新生狀態的執行緒有自己的記憶體空間,通過呼叫start方法進入就緒狀態(runnable)。
注意:不能對已經啟動的執行緒再次呼叫start()方法,否則會出現java.lang.IllegalThreadStateException異常。
2、就緒狀態
處於就緒狀態的執行緒已經具備了執行條件,但還沒有分配到CPU,處於執行緒就緒佇列(儘管是採用佇列形式,事實上,把它稱為可執行池而不是可執行佇列。因為cpu的排程不一定是按照先進先出的順序來排程的),等待系統為其分配CPU。等待狀態並不是執行狀態,當系統選定一個等待執行的Thread物件後,它就會從等待執行狀態進入執行狀態,系統挑選的動作稱之為“cpu排程”。一旦獲得CPU,執行緒就進入執行狀態並自動呼叫自己的run方法。
提示:如果希望子執行緒呼叫start()方法後立即執行,可以使用Thread.sleep()方式使主執行緒睡眠一夥兒,轉去執行子執行緒。
3、執行狀態
處於執行狀態的執行緒最為複雜,它可以變為阻塞狀態、就緒狀態和死亡狀態。
處於就緒狀態的執行緒,如果獲得了cpu的排程,就會從就緒狀態變為執行狀態,執行run()方法中的任務。如果該執行緒失去了cpu資源,就會又從執行狀態變為就緒狀態。重新等待系統分配資源。也可以對在執行狀態的執行緒呼叫yield()方法,它就會讓出cpu資源,再次變為就緒狀態。
當發生如下情況是,執行緒會從執行狀態變為阻塞狀態:
①、執行緒呼叫sleep方法主動放棄所佔用的系統資源,讓出CPU
②、執行緒呼叫一個阻塞式IO方法,在該方法返回之前,該執行緒被阻塞
③、執行緒試圖獲得一個同步監視器,但更改同步監視器正被其他執行緒所持有
④、執行緒使用wait()方法讓出系統資源後在等待某個通知(notify),
⑤、程式呼叫了執行緒的suspend方法將執行緒掛起。不過該方法容易導致死鎖,所以程式應該儘量避免使用該方法。
當執行緒的run()方法執行完,或者被強制性地終止,例如出現異常,或者呼叫了stop()、desyory()方法等等,就會從執行狀態轉變為死亡狀態。
4、阻塞狀態
處於執行狀態的執行緒在某些情況下,如執行了sleep(睡眠)方法,或等待I/O裝置等資源,將讓出CPU並暫時停止自己的執行,進入阻塞狀態。
在阻塞狀態的執行緒不能進入就緒佇列。只有當引起阻塞的原因消除時,如睡眠時間已到,或等待的I/O裝置空閒下來,執行緒便轉入就緒狀態,重新到就緒佇列中排隊等待,被系統選中後從原來停止的位置開始繼續執行。有三種方法可以暫停Threads執行:
5、死亡狀態
當執行緒的run()方法執行完,或者被強制性地終止,就認為它死去。這個執行緒物件也許是活的,但是,它已經不是一個單獨執行的執行緒。執行緒一旦死亡,就不能復生。 如果在一個死去的執行緒上呼叫start()方法,會丟擲java.lang.IllegalThreadStateException異常。
相關文章
- 多執行緒-執行緒生命週期圖解執行緒圖解
- Java多執行緒學習(1)建立執行緒與執行緒的生命週期Java執行緒
- Java執行緒的生命週期Java執行緒
- 【原創】Java多執行緒初學者指南(4):執行緒的生命週期Java執行緒
- Java之執行緒的生命週期Java執行緒
- 死磕 java執行緒系列之執行緒的生命週期Java執行緒
- Java—執行緒的生命週期及執行緒控制方法詳解Java執行緒
- java中執行緒池的生命週期與執行緒中斷Java執行緒
- 【Java基礎】:執行緒的生命週期Java執行緒
- 執行緒的【生命週期】和【執行緒的同步】(多視窗售票例子)執行緒
- 建立執行緒的4種方法 and 執行緒的生命週期執行緒
- Java指定週期執行執行緒Java執行緒
- Java中多執行緒的概述、實現方式、執行緒控制、生命週期、多執行緒程式練習、安全問題的解決...Java執行緒
- iOS多執行緒全套:執行緒生命週期,多執行緒的四種解決方案,執行緒安全問題,GCD的使用,NSOperation的使用iOS執行緒GC
- iOS執行緒生命週期的監控iOS執行緒
- Java多執行緒——執行緒Java執行緒
- Java執行緒生命週期與狀態切換Java執行緒
- 見過描述得最好的Java執行緒生命週期Java執行緒
- 啃碎併發(二):Java執行緒的生命週期Java執行緒
- Java多執行緒-執行緒中止Java執行緒
- Java多執行緒——執行緒池Java執行緒
- Java多執行緒-執行緒池的使用Java執行緒
- 【Java多執行緒】執行緒安全的集合Java執行緒
- java 多執行緒守護執行緒Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- Java多執行緒-執行緒狀態Java執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- java多執行緒9:執行緒池Java執行緒
- Java多執行緒之執行緒中止Java執行緒
- 【java多執行緒】(二)執行緒停止Java執行緒
- Java多執行緒——守護執行緒Java執行緒
- Java多執行緒16:執行緒組Java執行緒
- Java多執行緒18:執行緒池Java執行緒
- java多執行緒之執行緒的基本使用Java執行緒
- 【Java】【多執行緒】執行緒池簡述Java執行緒
- java多執行緒系列之執行緒池Java執行緒
- 【Java多執行緒】輕鬆搞定Java多執行緒(二)Java執行緒
- Java多執行緒(一)多執行緒入門篇Java執行緒