博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
等待多个并发事件完成的模型
阅读量:6715 次
发布时间:2019-06-25

本文共 2223 字,大约阅读时间需要 7 分钟。

简单的一个常见问题:如下一个人刷牙3分钟,洗脸1分钟,梳头1分钟,煮鸡蛋5分钟。完成这些事情最少多少时间?这其实对应编程来说就对应了题目的问题了,如何让主线程计算出多个并发事件完成的时间问题了。我们下面会接触一个java类,那就是CountDownLatch 类,详细内容后面有时间详细添加,先下面给出一个案例代码。下面代码只创建2个任务线程,计算完成任务最少的时间。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5
package test;import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.CountDownLatch;public class Test { public static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static void main(String[] args) { long start =new Date().getTime(); CountDownLatch latch=new CountDownLatch(2);//两个任务 DoSomething DoSomething1=new DoSomething("刷牙", 3000, latch);//模拟3秒代表3分钟 DoSomething DoSomething2=new DoSomething("煮鸡蛋", 5000, latch);//模拟5秒代表5分钟 DoSomething1.start(); DoSomething2.start(); try { latch.await(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }//等待所有任务完成 System.out.println("总用时: "+(new Date().getTime()-start)/1000 +"秒"); } public static class DoSomething extends Thread{ String jobName; int needTime; CountDownLatch latch; public DoSomething(String jobName ,int needTime ,CountDownLatch latch){ this.jobName=jobName; this.needTime=needTime; this.latch=latch; } public void run(){ System.out.println(sdf.format(new Date())+": "+jobName+"开始"); try { Thread.sleep(needTime); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ System.out.println(sdf.format(new Date())+": "+jobName+"结束"); latch.countDown();//一个任务完成 } } } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

这里写图片描述

 

http://bbs.bxzc123.com/forum.php?mod=viewthread&tid=244545

http://bbs.bxzc123.com/forum.php?mod=viewthread&tid=244541
http://bbs.bxzc123.com/forum.php?mod=viewthread&tid=244538
http://bbs.bxzc123.com/forum.php?mod=viewthread&tid=244527
http://bbs.bxzc123.com/forum.php?mod=viewthread&tid=244528
http://bbs.bxzc123.com/forum.php?mod=viewthread&tid=244529
http://bbs.bxzc123.com/forum.php?mod=viewthread&tid=244530

转载于:https://www.cnblogs.com/sy646et/p/7266031.html

你可能感兴趣的文章
《Nmap渗透测试指南》—第1章1.5节Mac OS安
查看>>
学习和使用 PHP 应该注意的10件事
查看>>
.NET Framework 源码
查看>>
centos上一键安装jdk、tomcat脚本
查看>>
ArrayList源码分析
查看>>
JS Object的静态方法汇总( 上 )
查看>>
jvm疯狂吞占内存,罪魁祸首是谁?
查看>>
sql server随机函数
查看>>
优朋普乐:OTT正重构电视版图
查看>>
Ubuntu 14.04 LTC 有线网络——网线不识别,灯不亮问题
查看>>
21_css布局2_浮动布局.html
查看>>
DateUtils 单元下的公用函数目录
查看>>
jQuery 练习[二]: 获取对象(1) - 基本选择与层级
查看>>
Sublime Text 2 快捷键用法大全
查看>>
linux非交互式生成秘钥
查看>>
C练习小代码-20151108
查看>>
以太坊RPC接口使用
查看>>
高并发写入mysql的设计
查看>>
用U盘安装debian系统
查看>>
Mac 下得Jmeter 测试
查看>>