在Java中,wait()
方法是Object
類的一個方法,主要用于讓當前線程等待,直到其他線程調用同一個對象的notify()
或notifyAll()
方法。wait()
方法通常與synchronized
關鍵字和Lock
接口一起使用,以實現線程間的同步和通信。
以下是wait()
方法的基本用法:
synchronized
關鍵字或將當前線程添加到對象的監視器(monitor)上來實現。synchronized (object) {
// 等待代碼
}
或者使用Lock
接口:
private final Lock lock = new ReentrantLock();
lock.lock();
try {
// 等待代碼
} finally {
lock.unlock();
}
wait()
方法,讓當前線程等待。此方法會導致當前線程進入等待狀態,并釋放對象的鎖,以便其他線程可以獲取鎖并執行同步代碼。object.wait();
notify()
或notifyAll()
方法時,等待的線程將被喚醒。首先,等待的線程需要重新嘗試獲取對象的鎖。如果成功獲取到鎖,等待的線程將繼續執行,并可能再次調用wait()
方法。synchronized (object) {
// 等待代碼
object.notify(); // 或 object.notifyAll();
}
或者使用Lock
接口:
lock.lock();
try {
// 等待代碼
lock.unlock(); // 釋放鎖,以便其他線程可以獲取鎖并執行同步代碼
lock.lock(); // 重新獲取鎖
object.notify(); // 或 object.notifyAll();
} finally {
lock.unlock();
}
注意:在使用wait()
方法時,務必確保在finally
塊中釋放鎖,以避免死鎖。此外,調用wait()
方法的線程必須在同步代碼塊或同步方法中,否則將拋出IllegalMonitorStateException
異常。