java 多线程通信 条件变量
时间: 2023-11-12 21:57:46 浏览: 41
Java中的多线程通信可以使用条件变量来实现。条件变量是一种同步机制,它允许线程在满足特定条件之前等待。在Java中,条件变量通常与锁一起使用,以确保线程安全。
Java中的条件变量是通过Condition接口实现的。Condition接口提供了await()、signal()和signalAll()等方法,用于线程等待和唤醒。
当一个线程调用await()方法时,它会释放锁并进入等待状态,直到另一个线程调用signal()或signalAll()方法来唤醒它。signal()方法只会唤醒一个等待线程,而signalAll()方法会唤醒所有等待线程。
下面是一个简单的示例代码:
```
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ConditionExample {
private Lock lock = new ReentrantLock();
private Condition condition = lock.newCondition();
private boolean flag = false;
public void waitForFlag() throws InterruptedException {
lock.lock();
try {
while (!flag) {
condition.await();
}
// do something when flag is true
} finally {
lock.unlock();
}
}
public void setFlag(boolean flag) {
lock.lock();
try {
this.flag = flag;
condition.signalAll();
} finally {
lock.unlock();
}
}
}
```
在上面的示例中,waitForFlag()方法会等待flag变为true,而setFlag()方法会设置flag为true并唤醒所有等待线程。