JUC包学习之CyclicBarrier

package cyclicBarrier;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

/** 
 * CyclicBarrier类似于CountDownLatch也是个计数器, 
 * 不同的是CyclicBarrier数的是调用了CyclicBarrier.await()进入等待的线程数, 
 * 当线程数达到了CyclicBarrier初始时规定的数目时,所有进入等待状态的线程被唤醒并继续。 
 * CyclicBarrier就象它名字的意思一样,可看成是个障碍, 
 * 所有的线程必须到齐后才能一起通过这个障碍,也就是一起开始完成run方法的运行。 
 * 作用在每个卡在每个子线程上
 * CyclicBarrier初始时还可带一个Runnable的参数, 
 * 此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。 
 */ 
public class CyclicBarrierTest {
    private CyclicBarrier barrier;
    //启动多个线程,多线程汇总二维数组每行的结果,然后汇总所有结果
    private int[][] data = new int[][]{
            {1,3,5,7,9},{2,4,6,8,10}
    };
    
    public CyclicBarrierTest() throws InterruptedException, BrokenBarrierException{
        //汇总数
        int total = 0;
        List threadList = new ArrayList();
        //启动二维数组行数个线程
        int threadCount = data.length;
        barrier = new CyclicBarrier(threadCount);
        for(int i=0;i

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

你可能感兴趣的:(java)