1. 程式人生 > >執行緒的五種狀態

執行緒的五種狀態

執行緒在它的生命週期中會處於各種不同的狀態:

  1. 新建狀態(New)
    用new語句建立的執行緒物件處於新建狀態, 此時它和其他Java物件一樣;僅在堆區中被分配了記憶體;

  2. 就緒狀態(Runnable)
    當一個執行緒物件建立後,其他執行緒呼叫它的start()方法,該執行緒就處於就緒狀態,處於就緒狀態的執行緒位於可執行池中,等待獲取CPU的使用權。

  3. 執行狀態(Running)
    處於這個狀態的執行緒佔用CPU,執行程式程式碼。在併發環境下,如果只有一個CPU,那麼在任何時刻只有一個執行緒處於執行狀態;只有處於就緒狀態的執行緒才能有機會轉到執行狀態。

  4. 阻塞狀態(Blocked)
    是指因為某些原因放棄爭奪CPU的使用權,暫時停止執行。當執行緒處於阻塞狀態,java虛擬機器不會給執行緒分配CPU,直到執行緒重新進入就緒狀態,它才有機會轉到執行狀態。
    阻塞狀態可分為三種:
    1、位於物件等待池中的阻塞狀態(Blocked in objects’ wait pool): 執行狀態時,執行某個物件的wait()方法;
    2、位於物件鎖池中的阻塞狀態(Blocked in object’s lock pool): 當執行緒處於執行狀態,試圖獲得某個物件的同步鎖時,如該物件的同步鎖已經被其他執行緒佔用,Java虛擬機器就會把這個執行緒放到這個物件的鎖池中;
    3、其他阻塞狀態(Otherwise Blocked): 當前執行緒執行了sleep()方法,或者呼叫了其他執行緒的join()方法,或者發出了I/O 請求時,就會進入這個狀態。

  5. 死亡狀態(Dead)
    當執行緒退出run()方法時,就進入死亡狀態,該執行緒結束生命週期。執行緒有可能是正常執行完run()方法退出,也有可能是遇到異常而退出。不管該執行緒正常結束還是異常結束,都不會對其他執行緒造成影響。