浅谈CountDownLatch

# CountDownLatch

        最近复习线程池相关内容整理了一些资料:新手可以参考一下,大佬如果觉得有误也请指出。

        CountDownLatch是JAVA提供在java.util.concurrent包下的一个辅助类,可以把它看成是一个计数器,其内部维护着一个count计数,只不过对这个计数器的操作都是原子操作,同时只能有一个线程去操作这个计数器(类似于),CountDownLatch通过构造函数传入一个初始计数值,调用者可以通过调用CounDownLatch对象的cutDown()方法,来使计数减1;如果调用对象上的await()方法,那么调用者就会一直阻塞在这里,直到别人通过cutDown方法,将计数减到0,才可以继续执行。个人感觉这是线程sleep方法的一个加强版。

     下面写了一个demo可以参考一下:这个demo用在做数据分流时的分多线程处理一个大的总数据然后主线程等待在汇总。多线程的任务分流算法之后在介绍

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author XUWEIJIE
 * @since 2018/8/27
 */
public class CountDownTest {

    private static int threadNum = 5;

    public static void main(String[] args) {

        //所有线程阻塞,然后统一开始
        final CountDownLatch otherThreadWaitNum = new CountDownLatch(1);

        //主线程阻塞,直到所有分线程执行完毕
        final CountDownLatch mainThreadWaitNum = new CountDownLatch(threadNum);

        ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(threadNum);

        for(int i=0;i

 

你可能感兴趣的:(线程池,日常随笔杂记)