java 并发编程-主线程等待多个子线程

Java多种方法实现等待所有子线程完成再继续执行 简介 在现实世界中,我们常常需要等待其它任务完成,才能继续执行下一步。Java实现等待子线程完成再继续执行的方式很多。我们来一一查看一下。 Thread的join方法 该方法是Thread提供的方法,调用join()时,会阻塞主线程,等该Thread完成才会继续执行,代码如下: private static void threadJoin() { List<Thread> threads = new ArrayList<>(); for (int i = 0; i < 阅读详情

话说实现线程有两种方式,这个大家想必都知道吧,一个是实现Runnable接口,实现run方法,一个是继承Thread类,重写run方法,实现Runnable接口,还是需要包装到new Thread(runnable).start()来调用这个线程。我这里用继承Thread这种方式来介绍一下吧,因为业务需要,需要使用多线程来提高效率。

public class MyThread extends  Thread{
    private String para;
    private String result;
   
    public CameraThread(String para) 
   {
        this.para=para;
    }

    public String getResult() {
        return result;
    }

    @Override
    public void run() {
        result = execute(para);//自己定义的方法
    }
}

实现主线程等待多个子线程可以使用sleep、join、CountDownLatch、CycleBarrier。众所周知,sleep()当前线程进入阻塞状态,指定时间后,解除阻塞,进入就绪状态,所以我觉得sleep不是很好控制,后面三种比较好用,具体你想用哪一种,就看你的业务场景吧!我这里介绍一下join这种方式吧!join()是阻塞指定线程,等到另一个线程完成后继续执行。

 

           Vector<Thread> threads = new Vector<Thread>();//vector保证线程安全
          for (int i=0;i<5;i++) {
           
                MyThread myThread = new MyThread();
                threads.add(myThread);//添加子线程
                myThread.start();
            }
            //主线程等待子线程结束任务
            for (Thread th:threads) {
                try {
                    th.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

如果业务场景是主线程等待多个子线程执行,Runnable和Thread这个两种线程实现方法各有优缺点吧!Runnable无法获取线程运行结束的结果,而Thread可以获取成员变量来得到运行后的结果。

▄█▀█●老铁,站住!别跑,我又不收你钱,如果我的demo能够帮助到你,请给我一个赞吧!

Win10环境借助DockerDesktop部署Open web UI集成DeepSeek Win10环境借助DockerDesktop部署Open web UI集成DeepSeek,并借助DuckDuckGo实现联网查询 阅读详情

相关推荐

拯救者R7000P(2021)装双系统Ubuntu20.04 解决联发科MT7921无线网卡在Ubuntu中不能联网

拯救者R7000P(2021)装双系统Ubuntu20.04/Ubuntu18.04 电脑配置:联想拯救者R7000P CPU:AMD R7-5800H GPU:RTX3060-6G 内存:16GB 固态:500G(原装)+500(加装) 1.做系统盘(本文以Ubuntu20.04为例) 1.下载Ubuntu20.04镜像 直接去Ubuntu官网或者一些国内的镜像去下载都可以,这里给出一个网址https://ubuntu.com/download/desktop,根据需要下载自己学要的Ubuntu版本,后缀

qq_41108639的博客 1万+

【Java中的Vector详解】

Java中的Vector是一个基本的、广泛应用的数据结构,它基于数组实现,具有动态扩容的能力,并支持同步访问和线程安全。本文将详细讲解Vector的实现原理、特性和使用场景。

我是Java程序员廖志伟,感谢朋友们的支持! 5856

分布式推理服务(策略:数据并行、张量并行、流水线并行、专家并行)技术分析

摘要:分布式推理突破单GPU内存和算力限制,支持大模型部署。四种核心策略包括: 数据并行:复制模型拆分数据,提升吞吐但内存效率低; 流水线并行:模型分阶段执行,支持超大模型但存在计算气泡; 张量并行:拆分层内矩阵运算,延迟低但通信开销大; 专家并行:动态激活MoE模型专家,计算高效但路由复杂。实际应用中常组合策略(如3D并行),需权衡模型规模、硬件条件与性能目标。

技术引领业务创新 947

java中等待一些线程执行完之后,再去执行别的方法(后者需要使用前者返回的结果)

一、使用Thread的join()等待所有的子线程执行完毕,主线程在执行,thread.join()把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。/** * * 处理一个业务逻辑的场景:当一组线程都执行完之后,在执行别的线程(后者要使用前者返回的结果) * @au...

虫逗蚊子的博客 6176

五.卡尔曼滤波器(EKF)开发实践之五: 编写自己的EKF替换robot_pose_ekf中EKF滤波器

本系列文章主要介绍如何在工程实践中使用卡尔曼滤波器,分五个小节介绍: 一.卡尔曼滤波器开发实践之一: 五大公式 二.卡尔曼滤波器开发实践之二: 一个简单的位置估计卡尔曼滤波器 三.卡尔曼滤波器(EKF)开发实践之三: 基于三个传感器的海拔高度数据融合 四.卡尔曼滤波器(EKF)开发实践之四: ROS系统位姿估计包robot_pose_ekf详解 五.卡尔曼滤波器(EKF)开发实践之五: 编写自己的EKF替换robot_pose_ekf中EKF滤波器 也就是本文 ...

okgwf的博客 4138

安装IC Complier 2(安装synposys的其他工具也可以来看看,因为殊途同归)

安装ICC2

hjt66666的博客 5771

等待多个线程执行完成后再运行的几种方式

介绍在使用多线程过程中,需要等待多个线程执行完后再执行主线程的几种实现方式,提升系统性能

dream_xin2013的专栏 5858

超详细!新手必看STM32-DMA配置与实验(串口使用DMA发送数据)

DMA就是:直接存储器访问。DMA传输数据从一个地址空间复制到另一个地址空间,提供在外设和存储器或者存储器和存储器之间的高速数据传输。

qq_1033275663的博客 2万+

Java并发编程原理与实战六:主线程等待子线程解决方案

本文将研究的是主线程等待所有子线程执行完成之后再继续往下执行的解决方案 public class TestThread extends Thread { public void run() { System.out.println(this.getName() + "子线程开始"); try ...

weixin_30314631的博客 199

保姆级教程:用QSTEM和DrProbe搞定你的第一张STEM模拟图(附Fe3O4实例文件)

本文提供了一份详细的STEM模拟图像生成教程,涵盖从晶体结构获取到最终图像模拟的全过程。通过QSTEM和DrProbe软件的操作指南,帮助材料科学研究者快速掌握STEM模拟技术,特别适合初学者。教程包含Fe3O4实例文件,详细解析参数设置、计算优化和结果分析等关键步骤。

weixin_33730836的博客 525

内部函数方式获取工序包容盒(最低点和最高点)PTHDSP_ask_box

内部函数方式获取工序包容盒(最低点和最高点)PTHDSP_ask_box。

成长需要沉淀。 397

并发编程 | CountDownLatch是如何控制线程执行流程

CountDownLatch主要是用于让一个或多个线程等待其他线程完成某些操作后再继续执行。例如,小组早上开会,组长(主线程)只有等所有人(每个人代表一个线程)到达会议室才能开;再如,游乐园里的过山车,一次可以坐10个人,为了节约成本,通常是等够10个人了才开。CountDownLatch的核心思想是“倒计时”:线程在执行之前,需要等到计数器倒数到零。

大厂小码农的博客 908

R数据分析:广义估计方程式GEE的做法和解释

好久没有更新文章了,因为同学们咨询的问题有点多,另一个原因就是自己实在太懒。。。。 今天继续给大家写广义估计方程式GEE。 In statistics, a generalized estimating equation (GEE) is used to estimate the parameters of a generalized linear model with a possible unknown correlation between outcomes. 上面的英文解释告诉我们,当我们

Codewar的博客 1万+

Java并发编程- CountDownLatch用法

Java并发编程- CountDownLatch用法 使用场景:需要在主线程等待其他子线执行完毕之后,然后再执行主线程的任务,这时需要使用CountDownLatch比较合适了。 代码例子: public class TestCountDownLatch1 { final static CountDownLatch latch = new CountDownLatch(2); ...

wflovejava的博客 255

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java进阶之并发编程二之Concurrent同步辅助类CountDownLatch锁存器和CyclicBarrier使用

往期篇幅: &lt;&lt;java进阶之并发编程一ReentrantLock同步锁的学习和syncthronized的区别&gt;&gt; &lt;&lt;java进阶之并发编程一ReentrantLock的实际应用和线程中断EXAMPLE&gt;&gt;   引言:伴随JDK1.5的新增java.util.concurrent,java并发编程也迎来了革新,不像1.5之前只有synct...

msdengxw的博客 362

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【并发编程】CountDownLatch与CyclicBarrier

CountDownLatch 简介 CountDownLatch,意思是倒数门闩。它的作用是多个线程做汇聚。主线程开启了 A、B、C 三个线程做不同的事情,但是主线程需要等待 A、B、C 三个线程全部完成后才能继续后面的步骤。此时就需要 CountDownLatch 出马了。CountDownLatch 会阻塞主线程,直到计数走到 0,门闩才会打开,主线程继续执行。而计数递减是每个线程自己操作 CountDownLatch 对象实现的。 这种场景很常见:篮球比赛中,作为控球后卫,如果没有快攻机会,..

蜂蜜柚子茶 330

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java并发编程--CountDownLatch配合线程池

Java并发编程–CountDownLatch配合线程池在处理一些耗时操作的时候,我们习惯上会把它放在子线程里面做,是的如果允许(我是指操作的内容),为了更快速地完成这堆操作,线程池是一个不错的选择。等等,好像有点不对,如果需要等待所有的线程在执行完后触发一个操作,这个时候你就需要用到CountDownLatch。其实这涉及到多线程异步转同步的问题,在java 1.5中,提供了一些非常有用的辅助类

爱吃水果的程序猿 5608

Android中主线程等待子线程方法实现

日常开发中,我们会遇到多个子线程并发请求,最终合并返回结果到主线程的情况,下面介绍两种实现方法. 方法一:使用join() public void Test() { System.out.println(System.currentTimeMillis() + ":开始执行"); final Thread thread1 = new Thread(new Runnable() { @Override public void

tt_0413的博客 2838

多线程并发编程-并发工具类----CountDownLatch原理分析&适用场景分析&对比join差异

一、前言: 首先,在前面我们在学习线程间通信的时候,学到一个关键字:join,例如在main方法中,执行t1.join(),t2.join(),则main主线程会阻塞运行,直到t1,t2分别执行完,回调阻塞在t1,t2上面的线程。这是main线程会重新获得执行契机。 今天咱们学习的CountDownLatch,是非常有用的开发工具类,在JDK1.5版本中,开发包,提供了CountDownLatch也可以实现join的功能,并且比join支持的功能更多,它允许一个或多个线程等待其他...

撸起袖子加油干 583

CountDownLatch用法简介

CountDownLatch是Java并发编程的常用类,是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,在闭锁上等待的线程就会被唤醒。 1、原理介绍 ① 构造器中传入的count值是计数器的初始值,是闭锁需要等待的线程数量,这个值只能被设置一次,而且不能重新设置。 ② await()方法会是调用此方法的线程阻塞,直到计数器的值减到0才被唤醒。 ③ countDown()方法会使计数器值 -1,可在子线程执行完任务调用此方法,并且要尽量放在f

.鞭指云端.的技术博客 512

java多线程,主线程等待其他子线程执行完毕执行和多个线城一同执行

package com.thread; import java.util.concurrent.CountDownLatch; /** * 主线程等待其他线程执行完毕 */ public class WhileTrueThread{ public static void main(String[] args) throws InterruptedException { CountDownLatch countDownLatch=new CountDownLatch(3);

weixin_38002107的博客 296

Java并发编程:CountDownLatch

在jdk5之后,提供了一些辅助类来帮助我们进行并发编程,CountDownLatch就是其中之一。看alibaba开源项目中用到CountDownLatch,决定总结一下CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如一个任务要等待其他任务执行完毕后才能执行,此时就可以通过CountDownLatch来实现 CountDownLa

张小菜在路上 413

java并发编程之美-阅读记录10

同步器 10.1CountDownLatch   在开发过程中经常会遇到在主线程中开启多个子线程去并行执行任务,并且主线程需要等待子线程执行完毕后在进行汇总。在CountDownLatch出现之前使用线程的join方法,但是join方法不灵活。   1、案例: package com.nxz.blog.otherTest; import java.util.concur...

weixin_30587025的博客 145

Java多线程之CountDownLatch和CyclicBarrier同步屏障的使用

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6558349.html 一:CountDownLatch CountDownLatch是一个执行 完成任务线程数 的 倒数计数器。我们考虑这种情况:士兵晨练,必须全队士兵集合完毕才开始跑步。用程序描述就:在晨练线程中,逐个启动士兵的集合线程,执行集合动作;等所有士...

a631278993的博客 152

浅析Java中CountDownLatch用法

学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:183993990 我们一起学Java! ...

chuifuhuo6864的博客 212

【JAVA核心知识】15.1:线程控制器CountDownLatch

CountDownLatch简介常用方法示例 简介 CountDownLatch像是一个计数器,适用于主线程要等待子线程执行完之后才继续执行的场景。它是不可重用的,每次使用只能重新构造。 常用方法 CountDownLatch(int count) : 构造方法,入参指定线程控制量,即要等待几个子线程执行完毕(准确的说是要执行几次countDown使得count为0)之后等待线程才能继续执行 void countDown():每次执行count减1,一般作为线程的最后一个步表示当前线程执行完毕 void

积 529
上一篇: java 将对象转成Map
下一篇: Java 海康录像机(NVR&&DVR)二次开发-通过时间下载录像和抓图功能
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值