使用CountDownLatch来模拟马拉松比赛
生活随笔
收集整理的這篇文章主要介紹了
使用CountDownLatch来模拟马拉松比赛
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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来模拟马拉松比赛的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5分钟在超能云(SuperVessel)
- 下一篇: Hadoop集群中添加硬盘