wait和notify方法

(六)wait和notify方法

在 Java 多线程编程中,wait() 和 notify()/notifyAll() 是 Object 类的核心方法,用于实现线程间的协作与通信。它们允许线程在特定条件下暂停执行(wait()),并在条件满足时被唤醒(notify()/notifyAll())。以下是详细介绍:

基本概念

  • wait():让当前线程释放对象锁,并进入该对象的等待队列(wait set),直到其他线程调用相同对象的 notify() 或 notifyAll()
  • notify():随机唤醒该对象等待队列中的一个线程,使其重新竞争对象锁。
  • notifyAll():唤醒该对象等待队列中的所有线程,让它们重新竞争对象锁。

关键特性

  • 必须在 同步块(synchronized 中调用,否则会抛出 IllegalMonitorStateException
  • wait() 会释放对象锁,而 sleep() 或 join() 不会释放锁。

中断处理

若线程在 wait() 时被中断,会抛出 InterruptedException,需妥善处理。

notify() 和notifyAll()

  • notify():仅唤醒一个线程,适用于:
    • 多个线程等待同一条件,且只需唤醒一个。
    • 唤醒所有线程可能导致性能问题(如大量线程竞争锁)。
  • notifyAll():唤醒所有线程,适用于:
    • 多个线程等待不同条件,需全部唤醒。
    • 避免某些线程永久等待(如生产者 - 消费者模型中,生产者唤醒消费者,消费者唤醒生产者)。

你可能感兴趣的:(wait和notify方法)