public class MainTest { public static void main(String[] args) throws InterruptedException { final CountDownLatch cdl = new CountDownLatch(1);// final CountDownLatch scdl = new CountDownLatch(5); ExecutorService pool = Executors.newFixedThreadPool(5); for (int i = 0; i < 5; i++){ pool.execute(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()+"准备好了"); try { cdl.await(); System.out.println(Thread.currentThread().getName()+"跑到终点"); scdl.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } } }); } Thread.sleep(100); //模拟给参赛人员陆续入场的时间 System.out.println("裁判发枪开始跑"); cdl.countDown(); //cdl减一为0唤醒await方法,同时唤醒5个线程用户 scdl.await(); //scdl阻塞,等线程池每个用户线程scdl减一减到0,唤醒 System.out.println("比赛结束"); pool.shutdown(); } }
CountDownLatch类简单使用例子
最新推荐文章于 2021-08-08 21:03:48 发布