在Java中,wait()
方法是Object
类的一个方法,用于让当前线程等待,直到其他线程调用该对象的notify()
或notifyAll()
方法。wait()
方法与synchronized
关键字一起使用,以实现线程同步。
以下是使用wait()
方法进行线程同步的步骤:
- 将需要同步的代码块或方法声明为
synchronized
。这样,只有获得锁的线程才能执行该代码块或方法。
public synchronized void synchronizedMethod() { // 同步代码 }
或
public void synchronizedMethod() { synchronized (this) { // 同步代码 } }
- 在同步代码块或方法中,使用
wait()
方法让当前线程等待。调用wait()
方法时,线程会释放对象锁,进入等待状态。为了确保线程安全,需要在wait()
方法后使用synchronized
关键字重新获取对象锁。
public synchronized void synchronizedMethod() { try { wait(); // 当前线程等待 } catch (InterruptedException e) { e.printStackTrace(); } // 重新获取对象锁并执行同步代码 }
- 在需要唤醒等待线程的地方,调用对象的
notify()
或notifyAll()
方法。notify()
方法会唤醒一个正在等待的线程,而notifyAll()
方法会唤醒所有正在等待的线程。
public synchronized void notifyMethod() { notify(); // 唤醒一个等待的线程 }
或
public synchronized void notifyAllMethod() { notifyAll(); // 唤醒所有等待的线程 }
注意:在使用wait()
、notify()
和notifyAll()
方法时,必须确保它们是在同步代码块或方法中调用的,否则会抛出IllegalMonitorStateException
异常。