// 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 中文站