本文介绍两种主线程等待子线程的实现方式,以5个子线程来说明:

1、使用Thread的join()方法,join()方法会阻塞主线程继续向下执行。

2、使用Java.util.concurrent中的CountDownLatch,是一个倒数计数器。初始化时先设置一个倒数计数初始值,每调用一次countDown()方法,倒数值减一,他的await()方法会阻塞当前进程,直到倒数至0。

public class AppMain {

    public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
long start = System.currentTimeMillis() ;
System.out.println();
ArrayList<Thread> arrayList = new ArrayList<>();
for(int i = ;i<;i++)
{
myThread m1 = new myThread();
m1.start();
m1.join();
myThread2 m2 = new myThread2();
m2.start();
m2.join();
}
long end = System.currentTimeMillis();
long endure = end-start;
System.out.println("耗时:"+endure);
} }

输出:

Thread-172 :1111 : 111
Thread-173 :2222 : 222
Thread-174 :1111 : 111
Thread-175 :2222 : 222
Thread-176 :1111 : 111
Thread-177 :2222 : 222
Thread-178 :1111 : 111
Thread-179 :2222 : 222
Thread-180 :1111 : 111
Thread-181 :2222 : 222
Thread-182 :1111 : 111
Thread-183 :2222 : 222
Thread-184 :1111 : 111
Thread-185 :2222 : 222
Thread-186 :1111 : 111
Thread-187 :2222 : 222
Thread-188 :1111 : 111
Thread-189 :2222 : 222
Thread-190 :1111 : 111
Thread-191 :2222 : 222
Thread-192 :1111 : 111
Thread-193 :2222 : 222
Thread-194 :1111 : 111
Thread-195 :2222 : 222
Thread-196 :1111 : 111
Thread-197 :2222 : 222
Thread-198 :1111 : 111
Thread-199 :2222 : 222
耗时:68

如果不采用join()方法的话,会先执行完main线程,子线程继续执行。则不会正确打印出耗时时间

输出如下:

Thread-181 :2222 : 222
Thread-182 :1111 : 111
Thread-183 :2222 : 222
Thread-184 :1111 : 111
Thread-185 :2222 : 222
Thread-186 :1111 : 111
Thread-187 :2222 : 222
Thread-188 :1111 : 111
Thread-189 :2222 : 222
Thread-190 :1111 : 111

耗时:68----------------------------------会发现主线程先执行完了
Thread-191 :2222 : 222
Thread-192 :1111 : 111
Thread-193 :2222 : 222
Thread-194 :1111 : 111
Thread-195 :2222 : 222
Thread-196 :1111 : 111
Thread-197 :2222 : 222
Thread-198 :1111 : 111
Thread-199 :2222 : 222

java多线程实现主线程等待子线程执行完问题的更多相关文章

  1. Java多线程--让主线程等待子线程执行完毕

    使用Java多线程编程时经常遇到主线程需要等待子线程执行完成以后才能继续执行,那么接下来介绍一种简单的方式使主线程等待. java.util.concurrent.CountDownLatch 使用c ...

  2. Java线程池主线程等待子线程执行完成

    今天讨论一个入门级的话题, 不然没东西更新对不起空间和域名~~ 工作总往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总的产景, 这时候就需要使用线程了. 一 ...

  3. Java多线程之以7种方式让主线程等待子线程结束

    记一次主线程等待子线程结束的多种方法的学习 在学习多线程时,最开始遇到的问题其实是"计算子线程运行时间",写到最后发现本文和标题更为符合,但是仍然基于问题:"在主线程中获 ...

  4. JAVA进阶----主线程等待子线程各种方案比较(转)

    创建线程以及管理线程池基本理解 参考原文链接:http://www.oschina.net/question/12_11255?sort=time 一.创建一个简单的java线程 在 Java 语言中 ...

  5. Java实现主线程等待子线程

    本文介绍两种主线程等待子线程的实现方式,以5个子线程来说明: 1.使用Thread的join()方法,join()方法会阻塞主线程继续向下执行. 2.使用Java.util.concurrent中的C ...

  6. C#主线程等待子线程运行结束

    佐左佑右 原文 C#主线程等待子线程运行结束 由于主程序中调用matlab的dll文件进行计算要用较长的时间,主界面会有很长时间的卡顿,造成的用户感受十分不好,因此我想在调用时,将调用放入子线程中,然 ...

  7. Java主线程等待子线程、线程池

    public class TestThread extends Thread { public void run() { System.out.println(this.getName() + &qu ...

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

    本文将研究的是主线程等待所有子线程执行完成之后再继续往下执行的解决方案 public class TestThread extends Thread { public void run() { Sys ...

  9. Java多线程--让主线程等待所有子线程执行完毕

    数据量很大百万条记录,因此考虑到要用多线程并发执行,在写的过程中又遇到问题,我想统计所有子进程执行完毕总共的耗时,在第一个子进程创建前记录当前时间用System.currentTimeMillis() ...

随机推荐

  1. jQuery使用JSONP时的错误处理

    概述 什么是域,简单来说就是协议+域名或地址+端口,3者只要有任何一个不同就表示不在同一个域.跨域,就是在一个域中访问另一个域的数据. 如果只是加载另一个域的内容,而不需要访问其中的数据的话,跨域是很 ...

  2. Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据

    Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...

  3. 数据图表插件echarts(二)

    前言 上一篇文章简单介绍了一下百度公司前端部门写的一个js插件echarts,这是一款很强大的图表插件,里面的地图控件也是很强大的,支持离线的使用,并且数据也是离线的,使用很方便.下面我就简单介绍一下 ...

  4. 关于ARM指令那些你必须知道的东西

    1.32位ARM指令每一位都有其作用,具体如下: 低12为第二操作数, 12~15位为目的寄存器, 16~19位为第一操作数, 20~27就是操作码, 28~31就是条件域. 2.多寄存器load和s ...

  5. 认识loadrunner及相关性能参数

    认识loadrunner及相关性能参数 LoadRunner,是一种预测系统行为和性能的负载测试工具.通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整 ...

  6. File.separator与 \分隔符

    在Windows下的路径分隔符和Linux下的路径分隔符是不一样的,当直接使用绝对路径时,跨平台会暴出“No such file or diretory”的异常. 比如说要在temp目录下建立一个te ...

  7. 深入理解Git - Git底层对象

    前篇: 深入理解Git - 一切皆commit 如何从稍微底层一点的角度,从底层实现理解一切皆commit ? 配合希沃白板课件食用,效果更佳: [希沃白板5]课件分享 : <Git 进阶 - ...

  8. Ubuntu18.04 之jdk安装与环境配置

    1.oracle官网下载压缩包. 下载地址为: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133 ...

  9. 美团客户端响应式框架EasyReact开源啦

    前言 EasyReact 是一款基于响应式编程范式的客户端开发框架,开发者可以使用此框架轻松地解决客户端的异步问题. 目前 EasyReact 已在美团和大众点评客户端的部分业务中进行了实践,并且持续 ...

  10. ceph部署过程中的错误

    ceph版本-jewel 用ssd盘来journal ,格式分区权限问题 [ceph-node2][WARNIN] ceph_disk.main.FilesystemTypeError: Cannot ...