在Java中,wait()
方法是Object
類的一個方法,用于讓當前線程等待,直到其他線程調用同一個對象的notify()
或notifyAll()
方法。為了正確使用wait()
方法,你需要遵循以下步驟:
確保當前線程是對象的所有者。wait()
方法只能在對象的所有者線程上調用,否則會拋出IllegalMonitorStateException
異常。
在調用wait()
方法之前,使用synchronized
關鍵字鎖定對象。這樣可以確保在同一時間只有一個線程可以進入臨界區。
在調用wait()
方法時,使用try-catch
語句捕獲InterruptedException
異常。這個異常會在其他線程中斷當前線程時拋出。
在適當的時機,使用notify()
或notifyAll()
方法喚醒等待的線程。這兩個方法都需要在同步塊或同步方法中調用,否則會拋出IllegalMonitorStateException
異常。
下面是一個簡單的示例:
public class SharedResource {
private boolean resourceAvailable = false;
public synchronized void waitForResource() throws InterruptedException {
while (!resourceAvailable) {
wait(); // 當前線程等待,直到資源可用
}
resourceAvailable = false; // 資源已使用,設置為false
}
public synchronized void releaseResource() {
resourceAvailable = true; // 設置資源為可用
notify(); // 喚醒等待的線程
}
}
在這個示例中,SharedResource
類有一個布爾變量resourceAvailable
,表示資源是否可用。waitForResource()
方法用于等待資源可用,而releaseResource()
方法用于釋放資源并喚醒等待的線程。注意,這兩個方法都需要在同步塊或同步方法中調用,以確保線程安全。