天天看點

sleep()和 wait()有什麼差別sleep()和 wait()有什麼差別與線程同步以及線程排程相關的方法。

sleep()和 wait()有什麼差別

不同點:

1. Thread 類的方法:sleep(),yield()等Object 的方法:wait()和 notify()等

2.每個對象都有一個鎖來控制同步通路。Synchronized 關鍵字可以和對象的鎖互動,來

實作線程的同步。

sleep 方法沒有釋放鎖,

wait 方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法。

3.wait,notify 和 notifyAll 隻能在同步控制方法或者同步控制塊裡面使用,而 sleep 可

以在任何地方使用

4.sleep 必須捕獲異常,而 wait,notify 和 notifyAll 不需要捕獲異常**

與線程同步以及線程排程相關的方法。

- wait():使一個線程處于等待(阻塞)狀态,并且釋放所持有的對象的鎖;

  • sleep():使一個正在運作的線程處于睡眠狀态,是一個靜态方法,調用此方法要處理

    InterruptedException 異常;

  • notify():喚醒一個處于等待狀态的線程,當然在調用此方法的時候,并不能确切的喚醒某

    一個等待狀态的線程,而是由 JVM 确定喚醒哪個線程,而且與優先級無關;

  • notityAll():喚醒所有處于等待狀态的線程,該方法并不是将對象的鎖給所有線程,而是讓

    它們競争,隻有獲得鎖的線程才能進入就緒狀态;