JUC学习之CountDownLatch

package countDownLatch;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;

/**
 * CountDownLatch类是一个同步计数器,构造时传入int参数,该参数就是计数器的初始值,
 * 每调用一次countDown()方法,计数器减1,计数器大于0 时,
 * await()方法会阻塞程序继续执行
 * */
public class CountDownLatchTest {
    //启动多个线程,多线程汇总二维数组每行的结果,然后汇总所有结果
    private int[][] data = new int[][] { { 1, 3, 5, 7, 9 }, { 2, 4, 6, 8, 10 } };
    private CountDownLatch countLatch;
    
    public CountDownLatchTest() throws InterruptedException{
        //汇总数
        int total = 0;
        List threadList = new ArrayList();
        // 启动二维数组行数个线程
        int threadCount = data.length;
        countLatch = new CountDownLatch(threadCount);
        for(int i=0;i

可以比较一下和CyclicBarrier的区别,Barrier是阻塞的地方,在每个具体的线程,而CountDownLatch,阻塞在节点上。搞得CountDownLatch反而有点关卡的意思。

转载于:https://my.oschina.net/sharkbobo/blog/233655

你可能感兴趣的:(java)