CyclicBarrier类的简介和使用

导读: CyclicBarrier类简介CyclicBarrier是回环屏障的意思,它可以让一组线程全部达到一个状态后再全部同时执行。回环的意思所有等待线程执行完毕,并重置CyclicBarrier的状态后它可被重

丝瓜网小编提示,记得把"CyclicBarrier类的简介和使用"分享给大家!

CyclicBarrier类简介

CyclicBarrier是回环屏障的意思,它可以让一组线程全部达到一个状态后再全部同时执行。回环的意思

所有等待线程执行完毕,并重置CyclicBarrier的状态后它可被重用。屏障的意思

线程调用await方法后就会被阻塞,这个阻塞点就称为屏障点,等所有线程都调用了await方法后,线程们就会冲破屏障,继续向下运行。示例代码

应用场景一

一项任务被分解为两个子任务,由两个线程去执行子任务, 当两个线程把自己的任务都执行完毕后再对它们的结果进行汇总处理。public class CyclicBarrierTest {

static int[] task = {1"2"3"4"5"6"7"8};

static int result1 = 0;

static int result2 = 0;

//创建一个CyclicBarrier的实例,添加一个所有子线程全部到达屏障后要执行的任务

private static CyclicBarrier cyclicBarrier = new CyclicBarrier(2"new Runnable(){

@Override

public void run() {

int sum = result1 +result2;

System.out.println("最后合并后的结果等于:"+sum);

}

});

public static void main(String[] args){

Thread thread1 = new Thread(new Runnable(){

@Override

public void run() {

try{

System.out.println("线程1开始处理子任务...");

int result = 0;

for(int i=0;i<4;i++){

result+=task[i];

}

result1= result;

System.out.println("线程1任务处理完毕!处理结果:"+result1);

cyclicBarrier.await();

}catch(Exception e){

e.printStackTrace();

}

}

丝瓜网 crfgs.com