java線程狀態及轉換
阿新 • • 發佈:2018-08-15
無限 其他 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線程狀態及轉換