CountDownLatch

来源:互联网 发布:手机时间轴软件 编辑:程序博客网 时间:2024/06/15 21:26

主要方法

 public CountDownLatch(int count);

 public void countDown();

 public void await() throws InterruptedException


import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.atomic.AtomicInteger;public class CountDownLatchTest {       public static void main(String[] args) throws InterruptedException {     final  AtomicInteger  count = new AtomicInteger(0); //  用于计数选手是否准备就绪             // 开始的倒数锁        final CountDownLatch begin = new CountDownLatch(3);          // 结束的倒数锁        final CountDownLatch end = new CountDownLatch(10);          // 十名选手        final ExecutorService exec = Executors.newFixedThreadPool(10);          for (int index = 0; index < 10; index++) {            final int NO = index + 1;              Runnable run = new Runnable() {                public void run() {                      try {                          // 如果当前计数为零,则此方法立即返回。                        // 等待                      System.out.println("No." + NO + " has  be ready ! ");                        count.addAndGet(1);                        begin.await();                          Thread.sleep((long) (Math.random() * 10000));                          System.out.println("No." + NO + " arrived");                      } catch (InterruptedException e) {                      } finally {                          // 每个选手到达终点时,end就减一                        end.countDown();                    }                  }              };              exec.submit(run);        }                 while(count.get()<10){        }                      for (int i = 1; i <= 3; i++) {         Thread.sleep(1000);         System.out.println("ready :" + i);         begin.countDown();           if(i==3){          break;         }     }                             System.out.println("Game Start");       // begin减一,开始游戏                    // 等待end变为0,即所有选手到达终点        end.await();          System.out.println("Game Over");          exec.shutdown();      }}

模拟了100米赛跑,10名选手已经准备就绪,只等裁判一声令下。当所有人都到达终点时,比赛结束console:No.2 has  be ready ! No.6 has  be ready ! No.8 has  be ready ! No.4 has  be ready ! No.1 has  be ready ! No.9 has  be ready ! No.5 has  be ready ! No.3 has  be ready ! No.7 has  be ready ! No.10 has  be ready ! ready :1ready :2ready :3Game StartNo.6 arrivedNo.10 arrivedNo.4 arrivedNo.3 arrivedNo.5 arrivedNo.7 arrivedNo.2 arrivedNo.8 arrivedNo.9 arrivedNo.1 arrivedGame Over

 

0 0
原创粉丝点击