java多线程:13、CountDownLatch同步辅助类【计数器】

来源:互联网 发布:腾讯抄袭 知乎 编辑:程序博客网 时间:2024/06/05 22:52

使用CountDownLatch计数器模拟赛跑比赛

import java.util.Random;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** *模拟赛跑比赛 *要求: *1、裁判等待队员准备; *2、裁判发起起跑通知; *3、裁判等待各队员到达终点 */public class ThreadTest2 {    public static void main(String[] args) {        //出发倒计时        CountDownLatch cdl1=new CountDownLatch(1),//裁判起跑通知                       cdl2=new CountDownLatch(3),//准备完毕通知裁判                       cdl3=new CountDownLatch(3);//裁判接收到结束通知        ExecutorService threadPool=Executors.newCachedThreadPool();        for(int i=0;i<3;i++){            threadPool.execute(new Runnable(){                @Override                public void run() {                    // TODO Auto-generated method stub                    System.out.println("队员"+Thread.currentThread().getName()+"准备完毕");                    cdl2.countDown();                    try {                        cdl1.await();                        System.out.println("队员"+Thread.currentThread().getName()+"出发");                        Thread.sleep(new Random().nextInt(5)*1000);                        System.out.println("队员"+Thread.currentThread().getName()+"到达终点");                        cdl3.countDown();                    } catch (InterruptedException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                    }                }            });        }        System.out.println("裁判等待所有队员准备完毕");        try {            cdl2.await();            Thread.sleep(new Random().nextInt(3)*1000);            System.out.println("开始");            cdl1.countDown();            System.out.println("裁判等待所有队员结束");            cdl3.await();            System.out.println("GOOD GAME!");            threadPool.shutdown();        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
0 0
原创粉丝点击