怎样理解wait()、notify()和notifyAll()

wait():让持有该对象锁的线程等待
notify():唤醒任意一个处于waiting状态的线程
notifyAll():唤醒所有处于waiting状态的线程。

他们之间的关系是:通过调用对象的wait()方法使线程暂停运行,通过notify/notifyAll方法唤醒wait()暂停的线程。

注意:

  1. 调用对象的wait()、notify()、notifyAll()方法需要拥有对象的监视锁,即他们只能在同步方法(块)中使用
  2. 调用wait()方法会使线程暂停并让出CPU资源,同时释放持有的对象的锁。
  3. 多线程使用notify()容易发生死锁,一般使用notifyAll()
  4. 被notify()、notifyAll()唤醒后,线程不会立即执行,而是需要重新竞争对象锁,获得锁的线程可以从wait处继续向下执行。

你可能感兴趣的:(怎样理解wait()、notify()和notifyAll())