Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java condition

作者:枫尘于往逝   发布日期:2025-06-09   浏览:62

// 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();
    }
}

解释说明:

  1. Lock 和 Condition:

    • Lock 是一个接口,提供了比内置锁(即 synchronized)更广泛的锁定操作。
    • Condition 是与 Lock 一起使用的条件变量,允许线程在某个条件不满足时等待,直到其他线程通知条件已满足。
  2. doWork 方法:

    • 获取锁并检查条件是否满足。如果不满足,则调用 condition.await() 让当前线程等待。
    • 当条件满足时,线程继续执行。
  3. complete 方法:

    • 获取锁并将条件设置为满足状态,然后调用 condition.signalAll() 唤醒所有等待的线程。
  4. main 方法:

    • 创建 ConditionExample 实例并启动一个新线程来执行 doWork 方法。
    • 主线程模拟一些工作后调用 complete 方法,使等待的线程继续执行。

通过这种方式,可以实现线程间的协作和同步。

上一篇:java是解释型还是编译型

下一篇:java 字符串格式化

大家都在看

java连接数据库的代码

ubuntu 卸载java

java sort用法

java collections.sort

java file类的方法

java 判断

java时间数据类型

java 时间加一天

java demo

java 截取

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站