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

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

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

join方式代码如下:

  1. package com.test.thread;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. public class MyThread extends Thread
  5. {
  6. public MyThread(String name)
  7. {
  8. this.setName(name);
  9. }
  10. @Override
  11. public void run()
  12. {
  13. System.out.println(this.getName() + " staring...");
  14. System.out.println(this.getName() + " end...");
  15. }
  16. /**
  17. * @param args
  18. */
  19. public static void main(String[] args)
  20. {
  21. System.out.println("main thread starting...");
  22. List<MyThread> list = new ArrayList<MyThread>();
  23. for (int i = 1; i <= 5; i++)
  24. {
  25. MyThread my = new MyThread("Thrad " + i);
  26. my.start();
  27. list.add(my);
  28. }
  29. try
  30. {
  31. for (MyThread my : list)
  32. {
  33. my.join();
  34. }
  35. }
  36. catch (InterruptedException e)
  37. {
  38. e.printStackTrace();
  39. }
  40. System.out.println("main thread end...");
  41. }
  42. }

运行结果如下:

main thread starting...
Thrad 2 staring...
Thrad 2 end...
Thrad 4 staring...
Thrad 4 end...
Thrad 1 staring...
Thrad 1 end...
Thrad 3 staring...
Thrad 3 end...
Thrad 5 staring...
Thrad 5 end...
main thread end...
CountDownLatch方式代码如下:

  1. package com.test.thread;
  2. import java.util.concurrent.CountDownLatch;
  3. public class MyThread2 extends Thread
  4. {
  5. private CountDownLatch count;
  6. public MyThread2(CountDownLatch count, String name)
  7. {
  8. this.count = count;
  9. this.setName(name);
  10. }
  11. @Override
  12. public void run()
  13. {
  14. System.out.println(this.getName() + " staring...");
  15. System.out.println(this.getName() + " end...");
  16. this.count.countDown();
  17. }
  18. /**
  19. * @param args
  20. */
  21. public static void main(String[] args)
  22. {
  23. System.out.println("main thread starting...");
  24. CountDownLatch count = new CountDownLatch(5);
  25. for (int i = 1; i <= 5; i++)
  26. {
  27. MyThread2 my = new MyThread2(count, "Thread " + i);
  28. my.start();
  29. }
  30. try
  31. {
  32. count.await();
  33. }
  34. catch (InterruptedException e)
  35. {
  36. e.printStackTrace();
  37. }
  38. System.out.println("main thread end...");
  39. }
  40. }

运行结果如下:

main thread starting...
Thread 2 staring...
Thread 2 end...
Thread 4 staring...
Thread 4 end...
Thread 1 staring...
Thread 1 end...
Thread 3 staring...
Thread 3 end...
Thread 5 staring...
Thread 5 end...
main thread end...

Java实现主线程等待子线程的更多相关文章

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

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

  2. java多线程实现主线程等待子线程执行完问题

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. Java 并发编程中的 CountDownLatch 锁用于多个线程同时开始运行或主线程等待子线程结束

    Java 5 开始引入的 Concurrent 并发软件包里面的 CountDownLatch 其实可以把它看作一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器,也就是 ...

随机推荐

  1. div横排放置对齐问题;block,inline,inline-block区别

    1.左右两个div都设置为float:left,如果右边div没有设置宽度,右边div的宽度会根据div里的内容自动调整. 缺点:不易控制 2.只有左侧div设置为float:left,右侧div设置 ...

  2. Django 资源文件配置

    staticfiles: 这是一个静态资源管理的app,django.contrib.staticfiles.老的版本中,静态资源管理一直是一个问题,部分app发布的时候 需要带上静态资源,在部署的时 ...

  3. tidb 安装试用&&以及安装几个问题解决

    备注:    tidb 听说已经很长时间了,一直无安装部署(主要是不像cockrouchdb 不见那么简单)   1. 环境准备(官方建议使用6台机器) // 我的机器准备(阿里云的,同时大家最好选择 ...

  4. Linux CentOS6.5 命令修改网络配置

    登陆成功后,编辑网络信息文件: 命令:vi /etc/sysconfig/network-scripts/ifcfg-eth0 修改配置如下图并保存,子网掩码.ip.默认网关根据自己网络进行调整: 永 ...

  5. 使用模块化编译缩小 apk 体积

    libcocos2dlua.so编译出来有11M多,其中包含了很多不需要的模块,模块化编译,把不需要用到的模块弄成0,体积就小了. 如: 修改D:\codeide\sDiShu2formm\frame ...

  6. np.random的随机数函数

    np.random的随机数函数(1) 函数 说明 rand(d0,d1,..,dn) 根据d0‐dn创建随机数数组,浮点数, [0,1),均匀分布 randn(d0,d1,..,dn) 根据d0‐dn ...

  7. Web Service简介(一)

    这篇博文,我们对Web Service进行一个简单的介绍和认识,作为Web Service的入门.在学习之前,你需要对HTML和XML有基本的了解,Web Service并不难,而且非常的简单. 什么 ...

  8. Unit02: CSS 概述 、 CSS 语法 、 CSS 选择器 、 CSS声明

    Unit02: CSS 概述 . CSS 语法 . CSS 选择器 . CSS声明 my.css p { color: yellow; } demo1.html <!DOCTYPE html&g ...

  9. ssdb的golang驱动的同步问题

    如果数据库连接只有一个,在某个时间点(指的是某个及其短的时间内),多个读写的话,会出问题,修改了下,加了个mutex,算是解决了此问题,贴下备忘 var mutex sync.Mutex func ( ...

  10. MySQL查询优化器工作原理解析

    手册上查询优化器概述 查询优化器的任务是发现执行SQL查询的最佳方案.大多数查询优化器,包括MySQL的查询优化器,总或多或少地在所有可能的查询评估方案中搜索最佳方案.对于联接查询,MySQL优化器所 ...