其實wait()方法就是使線程停止運行。
- 方法wait()的作用是使當前執行代碼的線程進行等待,wait()方法是Object類的方法,該方法是用來將當前線程
置入“預執行隊列”中,並且在wait()所在的代碼處停止執行,直到接到通知或被中斷爲止。 - wait()方法只能在同步方法中或同步塊中調用。如果調用wait()時,沒有持有適當的鎖,會拋出異常。
- wait()方法執行後,當前線程釋放鎖,線程與其它線程競爭重新獲取鎖
範例:觀察wait()方法使用
public static void main(String[] args) throws InterruptedException {
Object object = new Object();
synchronized (object) {
System.out.println("等待中...");
object.wait();
System.out.println("等待已過...");
}
System.out.println("main方法結束...");
}
這樣在執行到object.wait()之後就一直等待下去,那麼程序肯定不能一直這麼等待下去了。這個時候就需要使用到了
另外一個方法喚醒的方法notify()。
object.wait();
wait是 鎖的對象 進行wait
wait和sleep的比較:
- wait 之前需要請求鎖,而wait執行時會先釋放鎖,等被喚醒時再重新請求鎖。這個鎖是 wait 對像上的 monitor lock
- sleep 是無視鎖的存在的,即之前請求的鎖不會釋放,沒有鎖也不會請求。
- wait 是 Object 的方法
- sleep 是 Thread 的靜態方法