// Java Condition 示例代码
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ConditionExample {
private final Lock lock = new ReentrantLock();
private final Condition condition = lock.newCondition();
private boolean isDone = false;
public void doWork() {
lock.lock();
try {
System.out.println("等待条件满足...");
while (!isDone) {
condition.await(); // 等待条件满足
}
System.out.println("条件已满足,继续执行...");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
System.out.println("线程被中断");
} finally {
lock.unlock();
}
}
public void complete() {
lock.lock();
try {
isDone = true;
condition.signalAll(); // 通知所有等待的线程
} finally {
lock.unlock();
}
}
public static void main(String[] args) throws InterruptedException {
ConditionExample example = new ConditionExample();
Thread worker = new Thread(() -> example.doWork());
worker.start();
// 模拟一些工作
Thread.sleep(2000);
// 完成条件
example.complete();
worker.join();
}
}
Lock 和 Condition:
Lock 是一个接口,提供了比内置锁(即 synchronized)更广泛的锁定操作。Condition 是与 Lock 一起使用的条件变量,允许线程在某个条件不满足时等待,直到其他线程通知条件已满足。doWork 方法:
condition.await() 让当前线程等待。complete 方法:
condition.signalAll() 唤醒所有等待的线程。main 方法:
ConditionExample 实例并启动一个新线程来执行 doWork 方法。complete 方法,使等待的线程继续执行。通过这种方式,可以实现线程间的协作和同步。
上一篇:java是解释型还是编译型
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站