線程的5種基本狀態

問題:今天瞭解下線程中的幾個基本狀態


新建狀態(NEW)

當程序使用 new 關鍵字創建了一個線程之後,該線程就處於新建狀態,此時僅由 JVM 爲其分配 內存,並初始化其成員變量的值

就緒狀態(RUNNABLE)

當線程對象調用了 start()方法之後,該線程處於就緒狀態。Java 虛擬機會爲其創建方法調用棧和 程序計數器,等待調度運行。

運行狀態(RUNNING)

如果處於就緒狀態的線程獲得了 CPU,開始執行 run()方法的線程執行體,則該線程處於運行狀 態。

阻塞狀態(BLOCKED)

阻塞狀態是指線程因爲某種原因放棄了 cpu 使用權,也即讓出了 cpu timeslice,暫時停止運行。 直到線程進入可運行(runnable)狀態,纔有機會再次獲得 cpu timeslice 轉到運行(running)狀 態。阻塞的情況分三種:

  • 等待阻塞(o.wait->等待對列):運行(running)的線程執行 o.wait()方法,JVM 會把該線程放入等待隊列(waitting queue) 中。
  • 同步阻塞(lock->鎖池):運行(running)的線程在獲取對象的同步鎖時,若該同步鎖被別的線程佔用,則 JVM 會把該線 程放入鎖池(lock pool)中。
  • 其他阻塞(sleep/join):運行(running)的線程執行 Thread.sleep(long ms)或 t.join()方法,或者發出了 I/O 請求時, JVM 會把該線程置爲阻塞狀態。當 sleep()狀態超時、join()等待線程終止或者超時、或者 I/O 處理完畢時,線程重新轉入可運行(runnable)狀態。

線程死亡(DEAD)

線程會 以下面三種方式結束,結束後就是死亡狀態。

  • run()或call()方法執行完成,線程正常結束。
  • 線程拋出一個未捕獲的Exception或Error 
  • 直接調用該線程的stop方法結束該線程---該方法容易導致死鎖,通常不推薦使用。 

☛ 各位網友,以上僅供參考,如果不足或需要補充的儘管留言評論哈,謝謝!

☛下一篇揭祕線程池相關知識

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章