1. 程式人生 > >java線程基礎鞏固---wait和sleep的本質區別是什麽,深入分析(面試常見問題)

java線程基礎鞏固---wait和sleep的本質區別是什麽,深入分析(面試常見問題)

是什麽 執行 就是 需要 喚醒 直接 png java線程 解釋

對於wait和sleep貌似都會阻塞線程,但是它們確實是很大的區別的,所以下面一點點來探討:

  • 區別一、Sleep()是線程裏面的方法,而Wait()是Object類的方法。
    這個比較簡單,直接看代碼便知:
    技術分享圖片

    技術分享圖片

  • 區別二、sleep()方法不需要被notify喚醒,而wait()則需要【當然wait(10)這樣的情況除外】。
    這個比較容易理解,就不多解釋了。
  • sleep()使用是不需要使用syncronized加上同步鎖,但是wait()需要。
    這個做一下實驗就明白了:
    技術分享圖片
    嗯~~調用sleep()時是不需要加同步塊的,接下來再看wait():
    技術分享圖片
    好接著解決這個異常:
    技術分享圖片
  • sleep()時不會釋放同步鎖,但是wait()會釋放。
    這個不太好理解,下面做實驗驗證一下:
    技術分享圖片
    而當線程一sleep()結束之後,線程二就搶到鎖了。

    技術分享圖片

    好,接下來換成wait()再看結果:
    技術分享圖片
    看見木有,等於兩個線程同時執行了,也就是在線程一wait()期間,其鎖就被釋放可以被其它線程獲得了。

java線程基礎鞏固---wait和sleep的本質區別是什麽,深入分析(面試常見問題)