多个线程运行结束之后主线程再执行CountDownLatch
多个线程运行结束之后主线程再执行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的更多相关文章
- C#主线程等待子线程运行结束
佐左佑右 原文 C#主线程等待子线程运行结束 由于主程序中调用matlab的dll文件进行计算要用较长的时间,主界面会有很长时间的卡顿,造成的用户感受十分不好,因此我想在调用时,将调用放入子线程中,然 ...
- 并发、线程的基本概念&线程启动结束
并发.进程.可执行程序.进程.线程的基本概念 1.并发 并发当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段 ...
- java线程中断和终止线程运行
ava中启动一个线程很容易,通常情况下我们都是等到任务运行结束后让线程自行停止.但有时需要在任务正在运行时取消他们,使得线程快速结束.对此Java并没有提供任何机制.但是我们可以通过Java提供的线程 ...
- 《Java并发编程》之线程中断与终止线程运行
Java中启动一个线程很容易,通常情况下我们都是等到任务运行结束后让线程自行停止.但有时需要在任务正在运行时取消他们,使得线程快速结束.对此Java并没有提供任何机制.但是我们可以通过Java提供的线 ...
- Java多线程,判断其他线程是否结束的方法
方法1:通过Thread类中的isAlive()方法判断线程是否处于活动状态. 线程启动后,只要没有运行完毕,都会返回true. [注]如果只是要等其他线程运行结束之后再继续操作,可以执行t.join ...
- python主线程与子线程的结束顺序
引用自 主线程退出对子线程的影响--YuanLi 的一段话: 对于程序来说,如果主进程在子进程还未结束时就已经退出,那么Linux内核会将子进程的父进程ID改为1(也就是init进程),当子进程结束后 ...
- 线程概念( 线程的特点,进程与线程的关系, 线程和python理论知识,线程的创建)
参考博客: https://www.cnblogs.com/xiao987334176/p/9041318.html 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运 ...
- python 全栈开发,Day41(线程概念,线程的特点,进程和线程的关系,线程和python 理论知识,线程的创建)
昨日内容回顾 队列 队列 : 先进先出.数据进程安全 队列实现方式: 管道 + 锁 生产者消费者模型 : 解决数据供需不平衡 管道 双向通信 数据进程不安全 EOFError: 管道是由操作系统进行引 ...
- python网络编程--线程(锁,GIL锁,守护线程)
1.线程 1.进程与线程 进程有很多优点,它提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率.很多人就不理解了,既然进程这么优秀,为什么还要线程呢?其实,仔细观 ...
随机推荐
- iOS版本、iPhone版本、Xcode版本比对
iOS版本 iPhone版本 Xcode版本 其他 2003年 Xcode1.0 2005年4月29日 Xcode2.0 2007年1月9日 iPhone OS(iOS1): 虚拟键盘.谷歌地图 第一 ...
- PCB Genesis原点坐标转换关系
一.Genesis原点坐标转换关系: 1.读取Genesis坐标转换: UI界面坐标 = 文件坐标 - 偏移值 2.写入Genesis坐标转换: 文件坐标 = UI界面坐标 + 偏移值 3.为 ...
- [Apple开发者帐户帮助]四、管理密钥(2)获取密钥标识符
创建JSON Web令牌(JWT)以与启用的服务进行通信时,需要密钥标识符. 获取密钥标识符 在“ 证书,标识符和配置文件”中,选择侧栏中“键”下的“全部”. 在右侧,选择私钥. 密钥标识符显示在密钥 ...
- [Apple开发者帐户帮助]三、创建证书(1)证书概述
在开发应用程序的过程中,您将创建不同的证书类型,以便在不同的上下文中使用.您将为iOS,tvOS和watchOS应用程序使用相同的证书集,并为macOS应用程序使用不同的证书集.您将使用开发证书在设备 ...
- EmguCV学习——视频与图片互转
其实视频转图片在上篇文章中已经有些眉目了,其实就是按帧读取视频,然后把帧保存就ok.然后自己再加个进度条美化一下...这代码简单易懂,还是直接上代码吧. 视频转图片 /// <summary&g ...
- Android常见错误整理
1.当我new class的时候,提示以下错误: Unable to parse template "Class" Error message: This template did ...
- ajax-工作原理,包含技术,缺陷
1:原理 2:包含技术 3:缺陷
- jqurey事件 ready方法用法
ready 在文档加载后激活函数 例: <html> <head> <script type="text/javascript" src=" ...
- js 全选选框与取消全选代码
设置一个全选选框和四个子选框,要实现点击全选后四个子选框选中,取消全选后四个子选框也取消.全选后点击某个子选框,全选也能取消.当四个子选框都选中时,全选框也被选择. 实现代码: <script& ...
- C# 不卡屏延时方法,延迟系统时间,但系统又能同时能执行其它任务
//延迟系统时间,但系统又能同时能执行其它任务,不卡屏延时方法 public static void Delay(int milliSecond) { int start = Environment. ...