- CyclicBarrier:栅栏的概念,多线程的进行阻塞,等待某一个临界值条件满足后,同时执行
- 类比:每个线程代表一个跑步运动员,当运动员都准备好后,才一起出发,只要有一个人没有准备好,大家都等待
package com.example.core.juc;
import java.util.Random;
import java.util.concurrent.*;
public class UseCyclicBarrier {
static class Runner implements Runnable{
private String name;
private CyclicBarrier cyclicBarrier;
public Runner(String name,CyclicBarrier cyclicBarrier){
this.name = name;
this.cyclicBarrier = cyclicBarrier;
}
@Override
public void run(){
try {
System.out.println("运动员:" +this.name +", 进行准备工作");
Thread.sleep(1000*(new Random()).nextInt(10));
System.out.println("运动员:"+this.name +",准备OK!");
this.cyclicBarrier.await();
}catch(InterruptedException e){
e.printStackTrace();
}catch(BrokenBarrierException e){
e.printStackTrace();
}
System.out.println("运动员:"+this.name+",Go!Go!Go!");
}
}
public static void main(String[] args) {
CyclicBarrier cyclicBarrier = new CyclicBarrier(3);
ExecutorService executorService = Executors.newFixedThreadPool(3);
executorService.submit(new Thread(new Runner("张三",cyclicBarrier)));
executorService.submit(new Thread(new Runner("里斯",cyclicBarrier)));
executorService.submit(new Thread(new Runner("王武",cyclicBarrier)));
executorService.shutdown();
}
}
- 适用于如下情况,外部请求调用的函数由四部分组成,分别是1、2、3和4,第4部分需要1、2和3的结果作为输入值,并且他们将数据传给4的时间是不同的,所以4需要等待最慢的结果(短板效应),因此,最慢的也是我们今后的突破口
