runnable waiting
執行緒用synchronized(obj)獲取了物件鎖後
呼叫obj.wait()方法時,t 執行緒從runnable --> waiting
呼叫obj.notify(),obj.notifyall(),t.interrupt()時
競爭鎖成功,t 執行緒從waiting --> runnable
競爭鎖失敗,t 執行緒從waiting --> blocked
code:
@slf4j
public class test4 catch (interruptedexception e)
log.debug("其他**...");//斷點
}}, "t1").start();
new thread(() -> catch (interruptedexception e)
log.debug("其他**...");//斷點
}}, "t2").start();
try catch (interruptedexception e)
log.debug("喚醒obj上的其他執行緒");
synchronized (obj) }}
runnable waiting
當前執行緒呼叫 locksupport.park() 方法會讓當前執行緒從 runnable --> waiting
呼叫 locksupport.unpark(目標執行緒) 或呼叫了執行緒 的 interrupt() ,會讓目標執行緒從 waiting -->
runnable
runnable waiting
當前執行緒呼叫 t.join() 方法時,當前執行緒從 runnable --> waiting
注意是當前執行緒在t 執行緒物件的監視器上等待
t 執行緒執行結束,或呼叫了當前執行緒的 interrupt() 時,當前執行緒從 waiting --> runnable
runnable timed_waiting
t 執行緒用 synchronized(obj) 獲取了物件鎖後
呼叫 obj.wait(long n) 方法時,t 執行緒從 runnable --> timed_waiting
t 執行緒等待時間超過了 n 毫秒,或呼叫 obj.notify() , obj.notifyall() , t.interrupt() 時
競爭鎖成功,t 執行緒從 timed_waiting --> runnable
競爭鎖失敗,t 執行緒從 timed_waiting --> blocked
runnable timed_waiting
當前執行緒呼叫 t.join(long n) 方法時,當前執行緒從 runnable --> timed_waiting
注意是當前執行緒在t 執行緒物件的監視器上等待
當前執行緒等待時間超過了 n 毫秒,或t 執行緒執行結束,或呼叫了當前執行緒的 interrupt() 時,當前執行緒從
timed_waiting --> runnable
runnable timed_waiting
當前執行緒呼叫 thread.sleep(long n) ,當前執行緒從 runnable --> timed_waiting
當前執行緒等待時間超過了 n 毫秒或呼叫了執行緒 的 interrupt() ,當前執行緒從 timed_waiting --> runnable
runnable timed_waiting
當前執行緒呼叫 locksupport.parknanos(long nanos) 或 locksupport.parkuntil(long millis) 時,當前線
程從 runnable --> timed_waiting
呼叫 locksupport.unpark(目標執行緒) 或呼叫了執行緒 的 interrupt() ,或是等待超時,會讓目標執行緒從
timed_waiting--> runnable
執行緒狀態轉換
退出方法 沒有設定 timeout 引數的 object.wait 方法 object.notify object.notifyall 沒有設定 timeout 引數的 thread.join 方法 被呼叫的執行緒執行完畢 locksupport.park 方法 locksupport.unpark...
執行緒狀態轉換
建立後尚未啟動。可能正在執行,也可能正在等待 cpu 時間片。包含了作業系統執行緒狀態中的 running 和 ready。等待獲取乙個排它鎖,如果其執行緒釋放了鎖就會結束此狀態。等待其它執行緒顯式地喚醒,否則不會被分配 cpu 時間片。進入方法 退出方法 沒有設定 timeout 引數的 obje...
執行緒狀態轉換
test public void testthreadstate1 throws exception catch interruptedexception e system.out.println 1 thread.currentthread getname 的狀態是 thread.currentt...