package org.javacore.concurrent; import java.util.Random; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; /** * 同步辅助类:完成一组线程执行前,使得一个或多个线程一直等待 * * Created by bysocket on 16/4/26. */ public class CountDownLatchT { // 线程中止的计数器 private final static int COUNT = 10; private final static CountDownLatch count = new CountDownLatch(COUNT); // 线程池 private final static ExecutorService service = Executors.newFixedThreadPool(5); public static void main(String[] args) throws InterruptedException { for (int i = 0; i < COUNT; i++) { service.execute(() -> { try { int time = new Random().nextInt(5); TimeUnit.SECONDS.sleep(time); System.out.printf("Thread %s ## 耗时:%d\n", Thread.currentThread().getId(), time); // 线程结束后,计数器减一 count.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } }); } // 主线程一直被阻塞,直到count为0,实现线程同步 count.await(); service.shutdown(); System.out.println("同步线程执行组结束!"); } }