concurrent 包学习 CountDownLatch

CountDownLatch    是采用一个计数器进行控制 一个或多个线程执行完后,再进行接下来的操作。CountDownLatch 会在创建的时候给一个初始值,在每一个线程执行完后会 执行一个 countDown(); 相当于减一的操作,等计数器值到0时,他表示线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务。

@Slf4j
public class CountDownLatchExample {

    // 设置 线程的总数量
    private final static int totalClient = 200;

    public static void main(String[] args) throws InterruptedException {
        //设置 CountDownLatch 总线程数为上面定义的数量
        CountDownLatch countDownLatch = new CountDownLatch(totalClient);
        //创建一个线程池
        ExecutorService executorService = Executors.newCachedThreadPool();
        for (int i=0;i<totalClient;i++){
            final int number = i ;
            executorService.execute(() ->{
                try{
                    add(number);
                }catch (Exception e){
                    log.error("出错了 {}",e);
                }finally {
                    // 在线程任务结束后 执行 countDown(),
                    countDownLatch.countDown();
                }
            });
        }
        //当计数器 为 0 后,将通过这里,执行下面的命令
        countDownLatch.await();

        log.info("上面的任务都执行完成了");
    }
    private static void add(int number){
        log.info("这是第 {} 个线程",number);
    }
}

猜你喜欢

转载自blog.csdn.net/wjxhhh123/article/details/84656745