多个线程运行结束之后主线程再执行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 - css定位

    一.css:属性定位 1.css可以通过元素的id.class.标签这三个常规属性直接定位到 2.如下是百度输入框的的html代码: <input id="kw" class ...

  2. python 端口扫描程序

    #! /usr/bin/env python3 #-*- coding:utf-8 -*- import socket import threading OPEN_COUNT = 0 lock = t ...

  3. Oracle 12.2.0.1 RAC for rhel 7.X 数据库安装(节点1执行root.sh失败)

    说明: 最开始是用的rehat7.2安装12.2.0.1,后面安装GI节点一执行root.sh脚本失败,排查原因,最开始以为是操作系统的问题,换成rehat7.6,同样的出现问题,经过一番折腾,后面通 ...

  4. 管理mysql数据严格模式,和安全模式处理

    最近使用mysql数据库高一点的版本遇到了,插入和修改等语句失败情况.语句没有错误,但是workbench提示 Field 'id' doesn't have a default value.原因是 ...

  5. 5.12redis

    Window配置Redis环境和简单使用 一.关于Redis Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.它支持字符串.哈希表.列表.集合.有序 ...

  6. 2、scala条件控制与循环

    1.  if表达式 2.  句终结符.块表达式 3.  输入与输出 4.  循环 5.  高级for循环 1.  if表达式 if表达式的定义:scala中,表达式是有值的,就是if或者else中最后 ...

  7. WebForm 登陆test

    <script> window.onload = function () { document.getElementById("form1").onsubmit = f ...

  8. Vue: axios 请求封装及设置默认域名前缀 (for Vue 2.0)

    1. 实现效果 以get方法向http://192.168.32.12:8080/users 发起请求.获取数据并进行处理 this.apiGet('/users', {}) .then((res) ...

  9. H5网页涂鸦canvas

    最近做了个播放页面,标题和一个iframe;需要对这个iframe可以进行网页涂鸦.网页涂鸦肯定是canvas了.网上找了个差不多的,实验下来问题很多,干脆自己一步步修改,学习. 效果: 本项目没有引 ...

  10. Java导出Excel(附完整源码)

    导出excel是咱Java开发的必备技能啦,之前项目有这个功能,现在将其独立出来,分享一下.所用技术就是SpringBoot,然后是MVC架构模式.废话不多说,直接上代码了,源码点末尾链接就可以下载. ...