// 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是解释型还是编译型
下一篇:java 字符串格式化
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站