CyclicBarrier
昨天写了并发包里的CountDownLatch
今天写一下CyclicBarrier
我理解的CyclicBarrier 的作用就是 比如10个线程 他们会等待彼此都执行完或者都执行完某一部分任务后 才开始一起执行其他任务 有点儿绕
package com.test;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.TimeUnit;public class MyTest {public static void main(String[] args) throws InterruptedException { CyclicBarrier barrier = new CyclicBarrier(4);// 开启四个线程for (int i = 0; i < 4; i++) {new MyThread(barrier).start();}//等待第一次全部执行完 Thread.sleep(10000); System.out.println("===============测试可重用==================================");// 开启四个线程 测试CyclicBarrier可以重复使用 CountDownLatch 是不可以重复使用的for (int i = 0; i < 4; i++) {new MyThread(barrier).start();}}}class MyThread extends Thread { CyclicBarrier barrier;public MyThread(CyclicBarrier barrier) {this.barrier = barrier;}public void run() {try { System.out.println(getName() + "执行第一部分任务"); TimeUnit.SECONDS.sleep(2);// barrier.await();// 等待其他线程执行完成第一部分任务之后 才开始执行第二部分任务 System.out.println(getName() + "执行第二部分任务");} catch (Exception e) { e.printStackTrace();}}}
上边实例 可以看出来 第二部分总是在第一部分执行完成之后才开始执行