2019独角兽企业重金招聘Python工程师标准>>>

import java.util.Queue;
import java.util.Random;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;/**** 使用CountDownLatch来模拟马拉松比赛** @author 杨尚川*/
public class MarathonSimulator {public static void main(String[] args) throws Exception{ExecutorService executorService = Executors.newCachedThreadPool();int personCount = 3;final CountDownLatch prepare = new CountDownLatch(personCount);final CountDownLatch start = new CountDownLatch(1);final CountDownLatch end = new CountDownLatch(personCount);final Queue<String> queue = new ConcurrentLinkedQueue<>();if(personCount < 3){System.out.println("参赛人数必须 > 2");return;}for(int i=1; i<=personCount; i++){final int personNumber = i;executorService.submit(new Runnable() {@Overridepublic void run() {//模拟准备时间,使用随机数try{Thread.sleep(new Random(personNumber).nextInt(1000));}catch(Exception e){}System.out.println(personNumber+"号运动员准备完毕");prepare.countDown();try {//等待开始跑的命令start.await();}catch (Exception e){}System.out.println(personNumber+"号运动员开始跑");long s = System.currentTimeMillis();//模拟跑步时间,使用随机数try{Thread.sleep(new Random(personNumber).nextInt(10000));}catch(Exception e){}long c = System.currentTimeMillis() - s;System.out.println(personNumber+"号运动员到达目的地,耗时:"+c+"毫秒");end.countDown();queue.add(personNumber+"号");}});}System.out.println("有"+personCount+"名运动员参加本次的马拉松比赛");System.out.println("教练在等待运动员准备...\n");prepare.await();System.out.println("\n所有运动员准备完毕,教练开始喊:预备 --- 跑!");start.countDown();System.out.println("\n教练在等待所有的运动员跑完...\n");end.await();System.out.println("\n所有运动员都跑完了,开始颁奖啦:");System.out.println("冠军是:"+queue.poll());System.out.println("亚军是:"+queue.poll());System.out.println("季军是:"+queue.poll());executorService.shutdown();}
}
10人参加比赛程序运行之后的输出结果:有10名运动员参加本次的马拉松比赛
教练在等待运动员准备...2号运动员准备完毕
10号运动员准备完毕
7号运动员准备完毕
8号运动员准备完毕
5号运动员准备完毕
6号运动员准备完毕
3号运动员准备完毕
4号运动员准备完毕
1号运动员准备完毕
9号运动员准备完毕所有运动员准备完毕,教练开始喊:预备 --- 跑!教练在等待所有的运动员跑完...2号运动员开始跑
7号运动员开始跑
3号运动员开始跑
4号运动员开始跑
9号运动员开始跑
10号运动员开始跑
1号运动员开始跑
6号运动员开始跑
5号运动员开始跑
8号运动员开始跑
4号运动员到达目的地,耗时:1866毫秒
8号运动员到达目的地,耗时:2367毫秒
3号运动员到达目的地,耗时:3736毫秒
7号运动员到达目的地,耗时:4241毫秒
2号运动员到达目的地,耗时:6113毫秒
6号运动员到达目的地,耗时:6616毫秒
10号运动员到达目的地,耗时:7117毫秒
1号运动员到达目的地,耗时:8989毫秒
5号运动员到达目的地,耗时:9491毫秒
9号运动员到达目的地,耗时:9993毫秒所有运动员都跑完了,开始颁奖啦:
冠军是:4号
亚军是:8号
季军是:3号
3人参加比赛程序运行之后的输出结果:有3名运动员参加本次的马拉松比赛
教练在等待运动员准备...2号运动员准备完毕
3号运动员准备完毕
1号运动员准备完毕所有运动员准备完毕,教练开始喊:预备 --- 跑!教练在等待所有的运动员跑完...2号运动员开始跑
1号运动员开始跑
3号运动员开始跑
3号运动员到达目的地,耗时:3737毫秒
2号运动员到达目的地,耗时:6112毫秒
1号运动员到达目的地,耗时:8990毫秒所有运动员都跑完了,开始颁奖啦:
冠军是:3号
亚军是:2号
季军是:1号

转载于:https://my.oschina.net/apdplat/blog/385448

使用CountDownLatch来模拟马拉松比赛相关推荐

  1. Java模拟百米比赛

    最近做笔试遇到一个题,要编程模拟百米比赛,现在给它稍微做得完整一点的! 代码如下: import java.util.*; import java.util.concurrent.Concurrent ...

  2. PTA Python函数题 7-1 模拟乒乓球比赛 (20 分)

    7-1 模拟乒乓球比赛 (20 分)-函数版 中国选手与日本选手进行乒乓球比赛,每局先得11分者赢得此局,整个比赛5局3胜,如某队获胜达到3局,则赢得此场比赛. 假设中国选手每一分获胜的概率为m,(含 ...

  3. 程序设计 模拟排球比赛分析

    体育竞技分析:模拟N场比赛 计算思维:抽象 + 自动化 模拟:抽象比赛过程,自动模拟N场比赛,当N越大时,比赛结果分析越科学. 本次比赛规则:回合制,15分一局,先由一方发球,如胜利,则得1分并继续发 ...

  4. python网球比赛模拟主持稿_模拟课堂比赛主持人稿

    模拟课堂比赛主持人稿 尊敬的各位评委嘉宾亲爱的老师同学们大家晚上好!欢迎大家来 到地理科学学院第十三届 ' 为了明天 ' 师范技能大赛的比赛现场. 我是今晚的明亮我是沈慧都说教师是灵魂的工程师,而课堂 ...

  5. python模拟足球比赛_python初体验 —— 模拟体育竞技

    python初体验 -->>> 模拟体育竞技 一.排球训练营 1. 简介: 模拟不同的两个队伍进行排球的模拟比赛. 2. 模拟原理: 通过输入各自的能力值(Ⅰ),模拟比赛的进行( P ...

  6. Java多线程模拟运动比赛

    Java的并发包中有各种并发类,今天通过这个例子来熟悉使用CyclicBarrier类. CyclicBarrier类就像一个起跑线,定义了赛道的大小,当所有运动员(多线程)同时在起跑线, 那么Cyc ...

  7. 华为北京研究所第一届黑客马拉松比赛-基于Android防止儿童走失

    简介 这个项目是在2016年华为研究所举办的第一届黑客马拉松比赛时开发的项目,这个项目是借鉴之前写Android人脸对比,想出一个关于防止儿童走失的想法,然后增加浏览历史和定位失踪儿童以及推送附近人的 ...

  8. 黑客马拉松比赛:前浪、后浪都是一个浪!

    2020年7月,软银机器人联合世界人工智能大会(WAIC)和机器之心举办了黑客马拉松比赛.在软银机器人易用的开发工具.丰富的在线培训视频和文档的支持下,参赛队伍经过三天奋战,实现了从零到一快速开发出有 ...

  9. matlab模拟台球比赛,Matlab 台球模拟程序 动画演示

    发布时间: Oct 21, 2012 更新时间: Oct 21, 2012 总字数:1669 阅读时间:4m 作者: 谢先斌 Matlab 台球模拟程序 动画演示 代码 axis([-1.6,12.6 ...

最新文章

  1. r语言 图形一览_R语言之图形概览
  2. 用jstat摸清JVM线上系统情况
  3. 用于Web开发的8 个最好的跨平台编辑器
  4. 200905阶段一C++链表与继承特性
  5. echars水状_Echarts饼状图属性设置
  6. 红点中国、红杉中国联合领投,WakeData惟客数据完成1000万美元B轮融资
  7. Ubuntu查看解释器的两条命令
  8. cublas中执行矩阵乘法运算的函数 首先要注意的是cublas使用的是以列为主的存储方式,和c/c++中的以行为主的方式是不一样的。处理方法可参考下面的注释代码
  9. 《Android程序设计》一3.8 Android应用打包:.apk文件
  10. Unity3D 场景编辑器扩展学习笔记-Editor
  11. 2022 年度杭州未来科技城数字经济人才编程大赛
  12. html在js中为添加监听,使用addeventlistener为js动态创建的元素添加事件监听
  13. Java实战项目-移动电商秒杀系统seckill优化
  14. 2019西安交大计算机专业研究生分数线,2019西安交通大学研究生分数线汇总(含2016-2019历年复试)...
  15. notes服务器标识文件,怎样重新验证将要过期的服务器标识符文件_lotus notes
  16. html 5 游戏 脚本,HTML 5开发RPG游戏之四(游戏脚本化)(2)
  17. Nginx简单入门与反向代理和负载均衡
  18. 2021河南科技大学计算机考研科目,2021河南科技大学考研参考书目
  19. HTTP 请求的方式
  20. 校园歌手大赛10分c语言,校园歌手大赛策划方案5

热门文章

  1. Spray + Akka高性能异步IO并发
  2. shell脚本执行返回的状态码
  3. Django基础核心技术之Model模型的介绍与设计
  4. linux chmod命令使用
  5. 图书管理系统活动图和时序图
  6. XidianOJ 1176 ship
  7. SQL Server数据文件迁移
  8. VerilogHDL8位串行乘法器的分析(2)
  9. 多个project[项目]共享session
  10. 获取某年某月的第一天和最后一天的Sql Server函数