java主线程等待多个子线程中任意一个有结果后,主线程继续执行

1.背景

2.代码

复制代码
package com.qianxingniwo.ls;

import org.junit.Test;

import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.LockSupport;

/**
 * @Copyright (C) XXXXX技有限公司
 * @Author: ldp
 * @Date: 2023/7/26 15:30
 * @Description:
 */
public class Demo01 {

    /**
     * 测试:
     */
    @Test
    public void test01() {
        Thread threadMain = Thread.currentThread();
        AtomicReference<String> result = new AtomicReference<>("");

        Thread thread1 = new Thread(() -> {
            System.out.println("1");
            try {
                Thread.sleep(5 * 1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("1-结束");
        });

        Thread thread2 = new Thread(() -> {
            System.out.println("2");
            try {
                Thread.sleep(3 * 1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("2-结束");
        });

        Thread thread3 = new Thread(() -> {
            System.out.println("3");
            try {
                Thread.sleep(1 * 1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            result.set("线程3返回了结果");
            LockSupport.unpark(threadMain);
            System.out.println("3-结束");
        });
        thread1.start();
        thread2.start();
        thread3.start();

        System.out.println("主线程等待结果");
        LockSupport.park(this);
        System.out.println("主线程获得了结果:" + result.get());
        try {
            Thread.sleep(6 * 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("执行完成...");
    }
}
复制代码

 

完美

posted @   李东平|一线码农  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
历史上的今天:
2019-07-26 oracle之PLSQL导出-导入-表-存储过程等操作--亲测好用
点击右上角即可分享
微信分享提示