多个线程运行结束之后主线程再执行CountDownLatch

学习了:http://blog.csdn.net/lvyuanj/article/details/50737123  这个要膜拜一下!

http://blog.csdn.net/lynnlovemin/article/details/75604209

膜拜一下:  原文引用:

import java.util.concurrent.CountDownLatch;  

/**
* @filename : MyThread.java
* @description : 描述(中文)
* @author : lvyuanjun
* @create : 2016年2月24日 下午2:04:30
*
* Modification History:修改日志
* Date Author Version description
* -------------------------------------------------------------------------------
* 2016年2月24日 下午2:04:30 lvyuanjun
*/
public class MyThread { public static void main(String[] args) throws InterruptedException { CountDownLatch countDownLatch = new CountDownLatch(3); //子线程计算器 System.out.println("start..."); FirstThread f = new FirstThread(countDownLatch);
Thread thread = new Thread(f);
thread.start(); SecondThread s = new SecondThread(countDownLatch);
Thread thread1 = new Thread(s);
thread1.start(); ThreeThread t = new ThreeThread(countDownLatch);
Thread thread2 = new Thread(t);
thread2.start(); countDownLatch.await(); //等待子线程计算器为零时,则所有的子线程都已经运行完成 System.out.println("end...");
}
} class FirstThread implements Runnable { private CountDownLatch countDownLatch; public FirstThread(CountDownLatch countDownLatch){
this.countDownLatch = countDownLatch;
} public void run() {
System.out.println("FirstThread start....");
try {
Thread.sleep(1000*5);
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
System.out.println("FirstThread start1....");
countDownLatch.countDown(); //子线程执行完之后,子线程计算器减一,直至到零
} }
}
class SecondThread implements Runnable{ private CountDownLatch countDownLatch;; public SecondThread(CountDownLatch countDownLatch){
this.countDownLatch = countDownLatch;
} @Override
public void run() {
System.out.println("SecondThread start....");
try {
Thread.sleep(1000*9);
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
System.out.println("SecondThread start1....");
countDownLatch.countDown(); //子线程执行完之后,子线程计算器减一,直至到零
}
}
}
class ThreeThread implements Runnable{ private CountDownLatch countDownLatch;; public ThreeThread(CountDownLatch countDownLatch){
this.countDownLatch = countDownLatch;
}
@Override
public void run() {
System.out.println("ThreeThread start....");
try {
Thread.sleep(1000*3);
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
System.out.println("ThreeThread start1....");
countDownLatch.countDown(); //子线程执行完之后,子线程计算器减一,直至到零
}
}
}

多个线程运行结束之后主线程再执行CountDownLatch的更多相关文章

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

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

  2. 并发、线程的基本概念&线程启动结束

    并发.进程.可执行程序.进程.线程的基本概念 1.并发 并发当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段 ...

  3. java线程中断和终止线程运行

    ava中启动一个线程很容易,通常情况下我们都是等到任务运行结束后让线程自行停止.但有时需要在任务正在运行时取消他们,使得线程快速结束.对此Java并没有提供任何机制.但是我们可以通过Java提供的线程 ...

  4. 《Java并发编程》之线程中断与终止线程运行

    Java中启动一个线程很容易,通常情况下我们都是等到任务运行结束后让线程自行停止.但有时需要在任务正在运行时取消他们,使得线程快速结束.对此Java并没有提供任何机制.但是我们可以通过Java提供的线 ...

  5. Java多线程,判断其他线程是否结束的方法

    方法1:通过Thread类中的isAlive()方法判断线程是否处于活动状态. 线程启动后,只要没有运行完毕,都会返回true. [注]如果只是要等其他线程运行结束之后再继续操作,可以执行t.join ...

  6. python主线程与子线程的结束顺序

    引用自 主线程退出对子线程的影响--YuanLi 的一段话: 对于程序来说,如果主进程在子进程还未结束时就已经退出,那么Linux内核会将子进程的父进程ID改为1(也就是init进程),当子进程结束后 ...

  7. 线程概念( 线程的特点,进程与线程的关系, 线程和python理论知识,线程的创建)

    参考博客: https://www.cnblogs.com/xiao987334176/p/9041318.html 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运 ...

  8. python 全栈开发,Day41(线程概念,线程的特点,进程和线程的关系,线程和python 理论知识,线程的创建)

    昨日内容回顾 队列 队列 : 先进先出.数据进程安全 队列实现方式: 管道 + 锁 生产者消费者模型 : 解决数据供需不平衡 管道 双向通信 数据进程不安全 EOFError: 管道是由操作系统进行引 ...

  9. python网络编程--线程(锁,GIL锁,守护线程)

    1.线程 1.进程与线程 进程有很多优点,它提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率.很多人就不理解了,既然进程这么优秀,为什么还要线程呢?其实,仔细观 ...

随机推荐

  1. selenium3 + python - table定位

    前言 在web页面中经常会遇到table表格,特别是后台操作页面比较常见.本篇详细讲解table表格如何定位. 一.认识table 1.首先看下table长什么样,如下图,这种网状表格的都是table ...

  2. lnmp 安装FTP服务 并配置FTP用户

    lnmp 默认是不带FTP服务的,需要的童鞋要自行安装.步骤也很简单 一,进入lnmp目录,找到pureftpd.sh 二,直接运行该脚本 ./pureftpd.sh 按任意键开始安装,等待,安装成功 ...

  3. Django models 常用字段类型

    1.CharField字符串字段,存较短的字符串,长文本要用TextField.必须的参数:max_length 字符的最大长度2.TextField容量很大的文本字段.admin中用 <tex ...

  4. YOLO训练Pedestrain

    Pedestrain dl  使用darknet训练: 1. Inria 创建 yolo-inria.cfg 从cfg/yolo-voc.2.0.cfg拷贝一份,修改batch=64, subdivi ...

  5. 扩展银行项目,添加一个(客户类)Customer类。Customer类将包含一个Account对象。

    练习目标-使用引用类型的成员变量:在本练习中,将扩展银行项目,添加一个(客户类)Customer类.Customer类将包含一个Account对象. 任务 在banking包下的创建Customer类 ...

  6. php实现非对称加密

    <?php /** * 使用openssl实现非对称加密 * * @since 2015-11-10 */ class Rsa { /** * 私钥 * */ private $_privKey ...

  7. HTTP协议探索之Cache-Control

    缓存的存与用的控制 Cache-Control指定了请求和响应遵循的缓存机制.好的缓存机制可以减少对网络带宽的占用,可以提高访问速度,提高用户的体验,还可以减轻服务器的负担. Cache-Contro ...

  8. ApplicationLoader登录失败

    报错:Please sign in with an app-specific password. You can create one at appleid.apple.com 是因为帐号开启了双重认 ...

  9. tomcat多实例的部署

    解压部署tomcat程序创建2个实例的工作目录mkdir -p /usr/local/tomcat8_instance/tomcat1mkdir -p /usr/local/tomcat8_insta ...

  10. 明明引用了jquery,js还是报错

    先引jquery,不然加载上一个js的时候jquery还没有加载 <script src="js/jquery-1.9.1.js" type="text/javas ...