notify()和notifyAll()有什么区别?
时间: 2023-12-24 21:03:08 浏览: 71
Java notify和notifyAll的区别和相同
`notify()`和`notifyAll()`均是Object类中的方法,用于线程间的协作。
`notify()`方法是用于唤醒一个正在等待该对象的锁的线程,如果有多个线程等待该对象的锁,那么只有其中一个线程会被唤醒,具体唤醒哪个线程是由JVM所决定的。如果没有线程在等待该对象的锁,那么`notify()`方法不起作用。
`notifyAll()`方法是用于唤醒所有正在等待该对象的锁的线程,如果没有线程在等待该对象的锁,那么`notifyAll()`方法不起作用。
总结:
- `notify()`方法用于唤醒一个线程,是单个唤醒。
- `notifyAll()`方法用于唤醒所有等待该对象锁的线程,是多个唤醒。
- 两个方法都是将等待该对象锁的线程从等待池中移到同步池中,以便获取该对象的锁。
需要注意的是,对于`notify()`和`notifyAll()`方法,必须在同步代码块或同步方法中进行调用,否则会抛出`IllegalMonitorStateException`异常。
阅读全文