【深入理解Java併發原理】Thread.yield、Thread.sleep、Object.wait、 LockSupport.park 對比

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,不會釋放鎖,進入就緒狀態。

image

小結

  • yield 相當於進行一次主動調度,當前線程放棄 CPU 使用權,重新進入 CPU 的運行隊列,等待下一次調度。
  • sleep
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章