wait()
方法在 Java 中主要用于實現線程之間的通信和協作。以下是一些常見的使用場景:
wait()
和 notify()
或 notifyAll()
方法可以用于線程間的通信。class Buffer {
private int data;
private boolean empty = true;
public synchronized void put(int data) throws InterruptedException {
while (!empty) {
wait();
}
this.data = data;
empty = false;
notifyAll();
}
public synchronized int get() throws InterruptedException {
while (empty) {
wait();
}
empty = true;
notifyAll();
return data;
}
}
wait()
方法確保在同一時間只有一個線程可以訪問該資源。這可以通過使用 synchronized
關鍵字和 wait()
方法來實現。class SharedResource {
private boolean locked = false;
public synchronized void lock() throws InterruptedException {
while (locked) {
wait();
}
locked = true;
}
public synchronized void unlock() {
locked = false;
notifyAll();
}
}
wait()
方法。class UserInputHandler {
public void waitForUserInput() throws InterruptedException {
synchronized (this) {
while (!hasUserInput()) {
wait();
}
}
// 處理用戶輸入
}
public boolean hasUserInput() {
// 檢查是否有用戶輸入
return false;
}
}
需要注意的是,在使用 wait()
方法時,必須確保線程在正確的對象上調用 wait()
,否則會拋出 IllegalMonitorStateException
異常。此外,調用 wait()
方法的線程必須擁有對象的監視器鎖(即必須是對象的實例或靜態方法)。