wait() 和 notify()

wait()

  • 作用

    • 暂时性释放锁
    • 在 synchronized 块中间暂时释放锁
  • 特性

    • native 方法
  • 调用位置

    • 只能在 synchronized 方法内部执行

      • 对应 this 锁, this.wait()
    • 在 synchronized 块内部执行

      • 对应 锁对象的 wait() 方法
  • 机理

    • this.wait()
    • 执行后释放锁
    • 返回后再试图获取锁

notify() 和 notifyAll()

  • 作用

    • 唤醒 wait()
    • 唤醒正在等待锁的线程
  • 使用

    • 在相同的锁对象上(调用 wait()的锁对象)
    • 调用 notify()

      • eg: this.notify()
  • 区别

    • notify()

      • 只唤醒一个线程
    • notifyAll()

      • 唤醒所有等待线程