Thread.yield、Thread.sleep、Object.wait、 LockSupport.park 對比
sleep、wait、park區別
- Thread.sleep() 不會釋放佔有的鎖,Object.wait() 會釋放會佔有的鎖
- Thread.sleep() 必須傳入時間,Object.wait() 可以傳可不傳,不傳會一直阻塞下去。
- Thread.sleep() 會自動喚醒,然後繼續執行。
- Object.wait() 不帶時間方法,需要 Object.notify() 喚醒
- Object.wait() 帶時間,如果沒有notify ,到時間會自動喚醒。
- LockSupport.park 不需要捕獲中斷。
- LockSupport.park() 方法可以被 LockSupport.unpark() 喚醒
- Thread.sleep() 方法聲明上拋出了 InterruptedException 異常
- Thread.park() 不帶超時,需要另一個線程執行 unpark 喚醒。
- Thread.yield() 讓出 CPU,不會釋放鎖,進入就緒狀態。
小結
- yield 相當於進行一次主動調度,當前線程放棄 CPU 使用權,重新進入 CPU 的運行隊列,等待下一次調度。
- sleep