在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
异常。