免费静态网站模板,怎么做网站免费,百度互联网营销顾问,网站开发培训机构需要多少钱CyclicBarrier#xff1a;栅栏的概念#xff0c;多线程的进行阻塞#xff0c;等待某一个临界值条件满足后#xff0c;同时执行 类比#xff1a;每个线程代表一个跑步运动员#xff0c;当运动员都准备好后#xff0c;才一起出发#xff0c;只要有一个人没有准备好#…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;}Overridepublic 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.nameGoGoGo);}}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();//关闭线程池}
}
/*
运动员张三, 进行准备工作
运动员王武, 进行准备工作
运动员里斯, 进行准备工作
运动员张三,准备OK
运动员里斯,准备OK
运动员王武,准备OK
运动员张三GoGoGo
运动员王武GoGoGo
运动员里斯GoGoGo
*/
适用于如下情况外部请求调用的函数由四部分组成分别是1、2、3和4第4部分需要1、2和3的结果作为输入值并且他们将数据传给4的时间是不同的所以4需要等待最慢的结果短板效应因此最慢的也是我们今后的突破口