• CyclicBarrier 的中文意思是 "循环栅栏",简单理解就是一个可以循环利用的屏障。
  • 用于让多个线程阻塞在屏障处,当屏障达到放开的条件,所有被阻塞的线程会继续执行,此时 CyclicBarrier 会自动重置。
  • 阻塞线程在屏障处,调用 CyclicBarrier 对象的 await() 方法
  • CyclicBarrier 内部主要通过了 ReentrantLock 和 Condition 实现
  • CyclicBarrier 有两个构造方法:

//parties 表示屏障拦截的线程数量//barrierAction 表示最后一个达到的屏障的线程将执行 barrierActionpublic CyclicBarrier(int parties)public CyclicBarrier(int parties, Runnable barrierAction)


使用示例:

package constxiong.interview;
import java.util.concurrent.CyclicBarrier;
/** * 测试 CyclicBarrier 的使用 * @author ConstXiong * @date 2019-12-25 19:22:50 */public class TestCyclicBarrier {
 public static void main(String[] args) {    int parts = 10;    final CyclicBarrier cb = new CyclicBarrier(parts, () -> {      System.out.println(Thread.currentThread().getName() + ": I'am is last Thread");    });    for (int i = 0; i < 10; i++) {      new Thread(() -> {        System.out.println(Thread.currentThread().getName() + ": I'am come");        try {          cb.await();        } catch (Exception e) {          e.printStackTrace();        }        System.out.println(Thread.currentThread().getName() + ": go together");      }).start();    }  } }


打印结果:

Thread-2: I'am comeThread-0: I'am comeThread-1: I'am comeThread-4: I'am comeThread-3: I'am comeThread-6: I'am comeThread-9: I'am comeThread-5: I'am comeThread-7: I'am comeThread-8: I'am comeThread-8: I'am is last ThreadThread-8: go togetherThread-2: go togetherThread-0: go togetherThread-1: go togetherThread-4: go togetherThread-3: go togetherThread-6: go togetherThread-5: go togetherThread-9: go togetherThread-7: go together


CountDownLatch 和 CyclicBarrier 简单比较

  • CountDownLatch 是一个(或多个)线程等待 N 个线程完成某件事情之后再执行;CyclicBarrier 是每个线程相互等待,即 N 个线程都被拦截之后,然后一起放开执行
  • CountDownLatch 无法重置,不可复用;CyclicBarrier 计数到 parts 值时会自动重置,可复用


更多相关文章

  1. Redis为什么又引入了多线程?作者也逃不过“真香定理”?
  2. 详解第三种创建线程的方式-Callable接口
  3. java线程相关面试题(第一版)
  4. Java线程之线程的调度-让步
  5. java中的几个线程池的使用
  6. (不谈废话,只有干货)解决线程间协作问题的工具类Exchanger详解
  7. 一文看懂 Node.js 中的多线程和多进程[每日前端夜话0x107]
  8. 如何停止一个线程池?

随机推荐

  1. Android串口操作,简化android-serialport-
  2. android基础知识
  3. Android Tutorial(3)Android Menu Exampl
  4. 布局 遗忘 整理
  5. Android自带的图标集合
  6. Gradle sync failed: Could not GET 'htt
  7. Android:res之selector背景选择器
  8. android预定义样式简述
  9. android 加载图片到gallery
  10. Android Home's favorite.xml