java多线程执行时主线程的等待
1、通过thread.join()方式,注意:如果有多个子线程,需要将全部的线程先start,然后再join。代码示例如下:
public class Main 
{ 
    public static void main(String[] args) 
    { 
        long start = System.currentTimeMillis(); 
         
        List<Thread> list = new ArrayList<Thread>(); 
        for(int i = 0; i < 5; i++) 
        { 
            Thread thread = new TestThread(); 
            thread.start(); 
            list.add(thread); 
        } 
        try 
        { 
            for(Thread thread : list) 
            { 
                thread.join(); 
            } 
        } 
        catch (InterruptedException e) 
        { 
            e.printStackTrace(); 
        } 
         
        long end = System.currentTimeMillis(); 
        System.out.println("子线程执行时长:" + (end - start)); 
    } 
}
2、主线程等待多个子线程(CountDownLatch实现)
CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
主要方法
public CountDownLatch(int count);
public void countDown();
public void await() throws InterruptedException
构造方法参数指定了计数的次数
countDown方法,当前线程调用此方法,则计数减一
await方法,调用此方法会一直阻塞当前线程,直到计时器的值为0
示例代码如下:
public class CountDownLatchDemo {
final static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) throws InterruptedException {
CountDownLatch latch=new CountDownLatch(2);//两个工人的协作
Worker worker1=new Worker("zhang san", 5000, latch);
Worker worker2=new Worker("li si", 8000, latch);
worker1.start();//
worker2.start();//
latch.await();//等待所有工人完成工作
System.out.println("all work done at "+sdf.format(new Date()));
}
static class Worker extends Thread{
String workerName;
int workTime;
CountDownLatch latch;
public Worker(String workerName ,int workTime ,CountDownLatch latch){
this.workerName=workerName;
this.workTime=workTime;
this.latch=latch;
}
public void run(){
System.out.println("Worker "+workerName+" do work begin at "+sdf.format(new Date()));
doWork();//工作了
System.out.println("Worker "+workerName+" do work complete at "+sdf.format(new Date()));
latch.countDown();//工人完成工作,计数器减一
}
private void doWork(){
try {
Thread.sleep(workTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
java多线程执行时主线程的等待的更多相关文章
- java 多线程执行时长统计
		ExecutorService——shutdown方法和awaitTermination方法 shutdown方法:平滑的关闭ExecutorService,当此方法被调用时,ExecutorServ ... 
- Java主线程如何等待子线程执行结束(转)
		工作中往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总的产景, 这时候就需要使用线程了. 一个线程启动之后, 是异步的去执行需要执行的内容的, 不会影响主线 ... 
- Java 多线程基础(六)线程等待与唤醒
		Java 多线程基础(六)线程等待与唤醒 遇到这样一个场景,当某线程里面的逻辑需要等待异步处理结果返回后才能继续执行.或者说想要把一个异步的操作封装成一个同步的过程.这里就用到了线程等待唤醒机制. 一 ... 
- “全栈2019”Java多线程第二十四章:等待唤醒机制详解
		难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ... 
- 最全java多线程学习总结1--线程基础
		<java 核心技术>这本书真的不错,知识点很全面,翻译质量也还不错,本系列博文是对该书中并发章节的一个总结. 什么是线程 官方解释:线程是操作系统能够进行运算调度的最小单位,包含 ... 
- 《java多线程编程核心技术》不使用等待通知机制 实现线程间通信的 疑问分析
		不使用等待通知机制 实现线程间通信的 疑问分析 2018年04月03日 17:15:08 ayf 阅读数:33 编辑 <java多线程编程核心技术>一书第三章开头,有如下案例: ... 
- Java多线程间通信-解决安全问题、等待唤醒机制
		/*1.增加一个知识点一个类怎么在所有的类中,让其它类来共同修改它的数据呢?可以用单例设计模式可以用静态可以在其它类中做一个构造函数,接受同一个对象,这样就可以实现对象 2.状态选择可以用数字0 1 ... 
- java 多线程执行过程
		1.分支线程执行 过程: 2.线程运行的状态:五大状态 线程: 从新建状态 就绪状态 运行状态 挂起(阻塞)状态 死亡状态(结束,销毁) 3. 多线程:在同一个时间执行多个任务的操作,现在的软 ... 
- Java 多线程执行
		背景: 如果一个任务由多个子任务组成,子任务全部执行完成后然后由主线程对所有子任务结果进行封装,可以采用如下几种方式: 1.基于Guava ListenableFuture 进行: 2.基于Futur ... 
随机推荐
- [视频教程] ubuntu系统下安装最新版PHP7.3.X环境
			视频地址: https://www.bilibili.com/video/av69088870/ 笔记: 先安装一下这个命令 add-apt-repositoryapt-get install sof ... 
- C学习笔记(9)--- 预处理器,头文件
			1.预处理器: 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤.简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理. 我们将把 C 预处理 ... 
- 关于tomcat setenv
			tomcat setenv首先寻找执行base下的若不存在,寻找home下的只会执行一个 
- Ambari 大数据集群管理
			最近做了一个大数据项目,研究了下集群的搭建,现在将集群搭建整理的资料与大家分享一下!如有疑问可在评论区回复. 1前置配置 Centos7系统,每台系统都有java运行环境 全程使用root用户,避免安 ... 
- Jenkins根据svn版本号进行构建
			在svn版本url后面加上“@svn版本号”,如@2105 原文:https://blog.csdn.net/jlminghui/article/details/40426849 
- 鲜贝7.3--postman安装
			Postman电脑客户端安装: Postman的安装非常简单,在windows系统只需要双击安装包,然后什么都不需要操作,它直接就自己完成了,如下图.如果是mac 也是跟普通软件的安装方法相同.在初次 ... 
- CF1256A Payment Without Change
			CF1256A Payment Without Change 洛谷评测传送门 题目描述 You have aa coins of value nn and bb coins of value 11 . ... 
- OpenStack I18N
			OpenStack I18N 官方文档: https://docs.openstack.org/oslo.i18n/latest/user/usage.html https://docs.openst ... 
- 在线程内关闭thread handle,导致server crash
			很多年以前了,那时tester发现一个server crash,通过测试pager功能很多次,可以把server搞崩溃. 一般来说,能再现的bug都不难改,不过这次因为要跑很多次test,才能再现cr ... 
- 【2019.7.22 NOIP模拟赛 T1】麦克斯韦妖(demon)(质因数分解+DP)
			暴力\(DP\) 先考虑暴力\(DP\)该怎么写. 因为每个序列之后是否能加上新的节点只与其结尾有关,因此我们设\(f_i\)为以\(i\)为结尾的最长序列长度. 每次枚举一个前置状态,判断是否合法之 ... 
