# Cyclicbarrier

循环栅栏,用来进行线程协作,等待线程满足某个计数。构造时设置『计数个数』,每个线程执行到某个需要“同步的时刻调用wait0方法进行等待,当等待的线程数满足『计数个数』时,继续执行

也就是说可以重复使用


@Slf4j
public class Demo {

    public static void main(String[] args) throws Exception {
        CyclicBarrier cyclicbarrier = new CyclicBarrier(2);
        ExecutorService executorService = Executors.newFixedThreadPool(2);

        for (int i = 0; i < 3; i++) {
            int finalI = i;
            executorService.execute(() -> {
                try {
                    log.info("run :{}", finalI + "");
                    TimeUnit.SECONDS.sleep(1);
                    //阻塞一直到下一个线程调用await main才会打印
                    //也就是成对调用才会执行到main
                    //现在线程是3,就会阻塞最后一个线程,知道再次调用一个await
                    cyclicbarrier.await();
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            });
        }

        log.info("end ");

    }

}