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()
方法的线程必须拥有对象的监视器锁(即必须是对象的实例或静态方法)。