1. 程式人生 > >java執行緒的生命週期_筆記

java執行緒的生命週期_筆記

線上程的生命週期中,它要經歷新建(new)、就緒(Runnable)、執行(Running)、阻塞(Blocked)和死亡(Dead)5種狀態。

1、 當程式使用new關鍵字建立了一個執行緒之後,該執行緒就處於新建狀態(即:對執行緒物件用new關鍵字建立)。此時,由JVM為其分配記憶體,並初始化其成員變數的值。

2、 當執行緒物件呼叫了start()方法之後,該執行緒處於就緒狀態。

注意:只能對處於新建狀態的執行緒呼叫start()方法,否則將引發IllegalThreadStateException

3、 如果處於就緒狀態的執行緒獲得了CPU資源,開始執行run()方法的執行緒執行體,則該執行緒處於執行狀態。

4、 當發生如下情況時,執行緒將會進入阻塞狀態。(有5種情況)

     4.1 執行緒呼叫sleep()方法主動放棄所佔用的處理器資源。

     4.2 執行緒呼叫了一個阻塞式IO方法,在該方法返回之前,該執行緒被阻塞。

     4.3 執行緒試圖獲得一個同步監視器,但該同步監視器正被其他執行緒所持有。

     4.4 執行緒在等待某個notify

     4.5 程式呼叫了執行緒的suspend()方法將該執行緒掛起。但這個方法容易導致死鎖。

5、 執行緒會以如下3種方式結束,結束後就處於死亡狀態。

     5.1 run()或call()方法執行完成,執行緒正常結束。

     5.2 執行緒丟擲一個未捕獲的Exception或者error。

     5.3 直接呼叫該執行緒的stop()方法來結束該執行緒——該方法容易導致死鎖。

注意:當主執行緒結束時,其他執行緒不受任何影響,並不會隨之結束。一旦子執行緒啟動起來之後,它就擁有和主執行緒相同的地位,它不會受主執行緒的影響。