執行緒狀態轉換

2022-04-26 01:30:39 字數 1027 閱讀 8336

建立後尚未啟動。

可能正在執行,也可能正在等待 cpu 時間片。

包含了作業系統執行緒狀態中的 running 和 ready。

等待獲取乙個排它鎖,如果其執行緒釋放了鎖就會結束此狀態。

等待其它執行緒顯式地喚醒,否則不會被分配 cpu 時間片。

進入方法

退出方法

沒有設定 timeout 引數的 object.wait() 方法

object.notify() / object.notifyall()

沒有設定 timeout 引數的 thread.join() 方法

被呼叫的執行緒執行完畢

locksupport.park() 方法

-無需等待其它執行緒顯式地喚醒,在一定時間之後會被系統自動喚醒。

呼叫 thread.sleep() 方法使執行緒進入限期等待狀態時,常常用「使乙個執行緒睡眠」進行描述。

呼叫 object.wait() 方法使執行緒進入限期等待或者無限期等待時,常常用「掛起乙個執行緒」進行描述。

睡眠和掛起是用來描述行為,而阻塞和等待用來描述狀態。

阻塞和等待的區別在於,阻塞是被動的,它是在等待獲取乙個排它鎖。而等待是主動的,通過呼叫 thread.sleep() 和 object.wait() 等方法進入。

進入方法

退出方法

thread.sleep() 方法

時間結束

設定了 timeout 引數的 object.wait() 方法

時間結束 / object.notify() / object.notifyall()

設定了 timeout 引數的 thread.join() 方法

時間結束 / 被呼叫的執行緒執行完畢

locksupport.parknanos() 方法

-locksupport.parkuntil() 方法

-可以是執行緒結束任務之後自己結束,或者產生了異常而結束。

執行緒狀態轉換

退出方法 沒有設定 timeout 引數的 object.wait 方法 object.notify object.notifyall 沒有設定 timeout 引數的 thread.join 方法 被呼叫的執行緒執行完畢 locksupport.park 方法 locksupport.unpark...

執行緒狀態轉換

runnable waiting 執行緒用synchronized obj 獲取了物件鎖後 呼叫obj.wait 方法時,t 執行緒從runnable waiting 呼叫obj.notify obj.notifyall t.interrupt 時 競爭鎖成功,t 執行緒從waiting runna...

執行緒狀態轉換

test public void testthreadstate1 throws exception catch interruptedexception e system.out.println 1 thread.currentthread getname 的狀態是 thread.currentt...