1. 程式人生 > >java線程狀態及轉換

java線程狀態及轉換

無限 其他 bsp until med ron alt width 理解

java線程有6種狀態:

新建線程new,啟動線程runnable,阻塞block,限時等待timed_waiting,等待線程waiting,終止線程terminated

1.限時等待timed waiting :處於這種狀態的線程不會被分配cpu執行時間。不過無須等待被其他線程顯式地喚醒,在一定時間之後它們會由系統自動喚醒。以下方法會讓線程進行限時等待狀態:

a. Thread.sleep()方法;

b. 設置了Timeout參數的Object.wait()方法;

c. 設置了Timeout參數的Thread.join()方法;

d. LockSupport.parNanos()方法;

e. LockSupport.parkUntil()方法。

2.無限期等待Waiting :處於這種狀態的線程不會被分配cpu執行時間。它們要等待被其他線程顯式地喚醒。

以下方法會讓線程進入無限期的等待狀態:

a. 沒有設置Timeout參數的Object.wait()方法。

b. 沒有設置Timeout參數的Thread.join()方法。

c. LockSupport.park()方法。

3.阻塞 Blocked :線程被阻塞了。"阻塞狀態"與"等待狀態"的區別,"阻塞狀態"在等待著取到一個排他鎖,這個事件將在另外一個線程放棄這個鎖的時候發生。"等待狀態"則是等待一段時間,或者喚醒動作的發生。在程序等待進入同步區域的時候,
線程將進入這種狀態。

線程狀態的轉換如下:

技術分享圖片

參考資料:《深入理解java虛擬機》

java線程狀態及轉換