CountDownLatch的Demo
Posted love-yang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CountDownLatch的Demo相关的知识,希望对你有一定的参考价值。
1 package com.tjy.concurrentTools; 2 3 import java.util.Random; 4 import java.util.concurrent.CountDownLatch; 5 import java.util.concurrent.TimeUnit; 6 7 /** 8 * 该类要实现10个运动员都准备就绪后,裁判的发令枪后开始跑,使用CountDownLatch实现 9 */ 10 public class SportManRun { 11 12 private static final int NUMBER = 10; 13 //10个运动员,这里计数10 14 private static CountDownLatch readyLatch = new CountDownLatch(NUMBER); 15 //发令枪只有1次 16 private static CountDownLatch startLatch = new CountDownLatch(1); 17 18 public static void main(String[] args) { 19 //召唤10个远动员 20 for (int i = 0; i < NUMBER; i++) { 21 Thread runMan = new Thread(new RunningMan(readyLatch, startLatch, "第" + (i + 1) + "运动员")); 22 runMan.start(); 23 } 24 try { 25 //等待所有远动员准备就绪 26 readyLatch.await(); 27 System.out.println("所有运动员准备就绪了!等待裁判发令枪。。。"); 28 29 } catch (InterruptedException e) { 30 e.printStackTrace(); 31 } 32 startLatch.countDown(); 33 34 System.out.println("砰!!!!!!"); 35 } 36 37 static class RunningMan implements Runnable { 38 private CountDownLatch readyLatch; 39 private CountDownLatch startLatch; 40 private String name; 41 42 public RunningMan(CountDownLatch readyLatch, CountDownLatch startLatch, String name) { 43 this.name = name; 44 this.readyLatch = readyLatch; 45 this.startLatch = startLatch; 46 } 47 48 @Override 49 public void run() { 50 int prepareTime = new Random().nextInt(6000); 51 System.out.println(name + "需要时间:" + prepareTime + "准备。。。"); 52 try { 53 Thread.sleep(prepareTime); 54 } catch (InterruptedException e) { 55 e.printStackTrace(); 56 } 57 readyLatch.countDown(); 58 System.out.println(name + "准备完毕。。。"); 59 try { 60 startLatch.await(); 61 } catch (InterruptedException e) { 62 e.printStackTrace(); 63 } 64 System.out.println("开跑!!!!"); 65 66 } 67 } 68 }
执行结果
第1运动员需要时间:4454准备。。。
第2运动员需要时间:1015准备。。。
第3运动员需要时间:5133准备。。。
第4运动员需要时间:2094准备。。。
第5运动员需要时间:4407准备。。。
第6运动员需要时间:2224准备。。。
第7运动员需要时间:1160准备。。。
第8运动员需要时间:4010准备。。。
第9运动员需要时间:5655准备。。。
第10运动员需要时间:1284准备。。。
第2运动员准备完毕。。。
第7运动员准备完毕。。。
第10运动员准备完毕。。。
第4运动员准备完毕。。。
第6运动员准备完毕。。。
第8运动员准备完毕。。。
第5运动员准备完毕。。。
第1运动员准备完毕。。。
第3运动员准备完毕。。。
第9运动员准备完毕。。。
所有运动员准备就绪了!等待裁判发令枪。。。
砰!!!!!!
开跑!!!!
开跑!!!!
开跑!!!!
开跑!!!!
开跑!!!!
开跑!!!!
开跑!!!!
开跑!!!!
开跑!!!!
开跑!!!!
Process finished with exit code 0
以上是关于CountDownLatch的Demo的主要内容,如果未能解决你的问题,请参考以下文章
JavaSE--CountDownLatch & CyclicBarrier