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():喚醒所有處于等待狀态的線程,該方法并不是将對象的鎖給所有線程,而是讓
它們競争,隻有獲得鎖的線程才能進入就緒狀态;