等待多个并发事件完成的模型

news/2025/5/24 1:19:38
简单的一个常见问题:如下
一个人刷牙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


https://dhexx.cn/news/show-3661190.html

相关文章

Linux标准目录结构(FHS)

所有unix和类unix操作系统的目录结构均是以根开始的倒挂树形结构 路径 所谓路径即目录组成结构 一个linux路径由"/"和目录(文件)名称两部分组成 比如:/etc/passwd 如果"/"出现在路径开头,则其表示根目录,在路径中间…

点击表头排序的几种方法

我记得老早老早大家就开始在经典讨论表格排序的问题了,过了这么多年,这个问题的解决方案层出不穷,见仁见智。用script,htc,xmlxsl等等怎么着都能实现,只是效率不同罢了。今天正好学习.net的时候学到这一块,…

网上图书商城项目学习笔记-032编辑图书第二步

一、流程分析 二、代码 1.view层 (1).jsp (2).js 2.servlet层 (1)AdminBookServlet.java 1 /**2 * 编辑图书3 * param req4 * param resp5 * return6 * throws ServletException7 * throws IOException8 */9 public String edit(H…

以色列TOP极链的区块链技术物联网的应用

目前TOP极链技术已经在通信、国防、金融市场、保险、政府服务、数字营销方面取得应用进展。 TOP极链的技术可以提升物联网上各个节点设备运营的长久性和安全性,未来TOP极链将打开区块链技术新的起点。 1. 消耗与收益循环价值 传统的中心式计算模式,例如云…

Netty-Mina深入学习与对比

这博文的系列主要是为了更好的了解一个完整的nio框架的编程细节以及演进过程,我选了同父(Trustin Lee)的两个框架netty与mina做对比。版本涉及了netty3.x、netty4.x、mina1.x、mina2.x、mina3.x。这里并没有写netty5.x的细节,看了…

书店的风景

http://www.edubridge.com/erxiantang/library/shudian.htm 看了这篇文章,让我重新拾起了被我遗忘多时的梦想。其中提到的《书店风景》,早在2001年我就已经买了,只是现在已经淹没在我的书柜之中了。 其实,人生…

Debugging D Program on Windows

http://x64dbg.com/ http://www.ollydbg.de/version2.html 转载于:https://www.cnblogs.com/lilei9110/p/5183500.html

jquery通过新浪财经的接口获取股票走势图和股票数据

为什么80%的码农都做不了架构师?>>> 效果图如下: 实现代码: /*首页三板指数显示,比如s_sh000001是上证指数,后面依次可以去新浪财经网查看,然后通过接口获取数据,分割数据后加到自己的网站.*/ $(function(){$.ajax({cache:true,url:"http://hq.si…

php 的定界符 eof 的问题

PHP是一个Web编程语言,在编程过程中难免会遇到用echo来输出大段的html和javascript脚本的情况,如果用传统的输出方法 ——按字符串输出的话,肯定要有大量的转义符来对字符串中的引号等特殊字符进行转义,以免出现语法错误。如果是一…

有关“为何选择Netty”的11个疑问及解答

1.Netty 是什么?Netty 是一个基于 JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性。2.使用 Netty 能够做什么?开发异步、非阻塞的 TCP 网络应用程序…