JAVA多線程系列教程一 多線程狀態

我們先看下線程狀態,在很多的教程和文章中,對線程的狀態定義都不是六種,而這裏我們所說的這六種線程狀態,是參考了Thread這個類的源碼,在裏面很清晰地定義了這六種狀態。

 

JAVA多線程系列教程-線程狀態

 

1.NEW(新創建尚未啓動)

new出一個新的線程對象,還沒調用start()方法

 

2.RUNNABLE(運行狀態)

在start()調用完成後,線程由NEW變成RUNNABLE,並試圖佔用CPU資源,對於我們個人理解的角度,它可以分爲running(運行中)和ready(等待調用),但對jvm而言,只有一種狀態就是RUNNABLE

 

3.BLOCKED(阻塞狀態)

當一個線程進入synchronized修飾的對象或方法塊時,會嘗試去獲取類鎖或者對象鎖(也叫monitor),如果該鎖被其他線程佔用,那麼當前線程就會進入BLOCKED狀態,直到能拿到鎖。注意,該狀態和wait()導致的狀態是兩碼事。

 

4.WAITING(無限時等待)

當線程處於RUNNABLE時,調用了wait,join,park等方法調用時,會進入waiting狀態。

 

5.TIMED_WAITING(有限時等待)

當時間達到時會導致線程回到工作狀態Runnable。

 

6.TERMINATED(線程終止狀態)

線程結束了,就處於這種狀態,也就是run方法運行完了。

 

 

 

 

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