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