java wait() 和 notify()如何使用

在Java中,wait()notify()是用于在多线程环境中进行线程挂起和唤醒的方法,它们必须在同步块或者同步方法中使用。以下是它们的简单用法示例:wait()的使用
  1. synchronized (lockObject) {
  2.     while (conditionIsNotMet) {
  3.         try {
  4.             lockObject.wait();  // 当条件未满足时,线程挂起
  5.         } catch (InterruptedException e) {
  6.             // 处理异常
  7.         }
  8.     }
  9.     // 执行需要同步的操作
  10. }

在上述示例中,线程在获取了lockObject的锁之后,使用wait()方法来将自己挂起,直到条件满足或者其他线程调用notify()或notifyAll()来唤醒它。

notify()的使用
  1. synchronized (lockObject) {
  2.     // 修改条件
  3.     lockObject.notify();  // 唤醒等待该对象锁的一个线程
  4. }

在上述示例中,当某个线程在获得了lockObject的锁之后,通过调用notify()方法来唤醒一个正在等待lockObject锁的线程,以便该线程可以继续执行。

需要注意的是,调用wait()和notify()方法之前必须获得对象锁,也就是必须在synchronized块中调用。另外,wait()和notify()必须作用于同一个对象锁上。

上述是简单的示例,实际使用中还需要结合具体的业务场景和线程通信的逻辑来灵活使用wait()和notify()。另外,要注意处理中断异常InterruptedException,以及在使用wait()方法的时候应该总是放在循环中,并且检查条件是否满足。