java wait notify notifyAll 用法
时间: 2024-11-15 22:32:40 浏览: 28
在Java并发编程中,`wait()`, `notify()`, 和 `notifyAll()` 是 `Object` 类的一部分,用于线程间的通信,特别是在多线程同步中。它们主要用于 `synchronized` 关键字修饰的代码块或方法中。
1. `wait()`: 当一个线程持有某个对象的锁并且想要等待特定条件时,可以调用 `wait()`。这将释放锁,并让当前线程进入等待状态,直到有其他线程通过调用 `notify()` 或 `notifyAll()` 将其唤醒。在此期间,线程不会执行,而是处于不可中断的阻塞状态。
2. `notify()`: 只有一个线程能够被唤醒,即通知第一个正在等待的线程,使其恢复执行。如果你只想唤醒一个等待的线程,应该使用此方法。
3. `notifyAll()`: 另一方面,`notifyAll()` 会唤醒所有等待在该对象上的线程。这意味着如果有多个线程在同一个对象上等待,调用 `notifyAll()` 可能会使所有线程都恢复执行。
示例代码:
```java
class SharedResource {
private final Object lock = new Object();
private boolean resourceAvailable = false;
synchronized void acquireResource() throws InterruptedException {
while (!resourceAvailable) {
wait(); // 等待资源可用
}
resourceAvailable = false; // 表明资源已使用
}
synchronized void releaseResource() {
resourceAvailable = true; // 设置资源可用
notifyAll(); // 唤醒所有等待的线程
}
}
// 在其他线程中调用
SharedResource shared = new SharedResource();
shared.acquireResource();
// ...使用资源...
shared.releaseResource();
```
阅读全文