美文网首页
JUC-工具类:2. CyclicBarrier

JUC-工具类:2. CyclicBarrier

作者: rock_fish | 来源:发表于2021-06-15 12:00 被阅读0次

功能概述

  1. 构造一个 可重复使用的 ,带计数器(计数递减)的 Barrier
  2. 每当一个线程进入Barrier(调用await),计数减一,根据减一后的结果是否为0分俩种情况。
    2.1 如果是0,如果有brokenBarrier action 则执行;然后所有await的线程激活,继续执行。
    2.2 如果计数>0,阻塞等待。

方法介绍

  1. 构造方法 :
    1.1 指定计数器的初始值
    1.2 指定 BrokenBarrier Action

  2. await :
    线程执行await()方法调用后,Barrier的计数器的值减一,根据减一后的结果是否为0分俩种情况。
    2.1 值>0,则阻塞当前线程;
    2.2 若值==0,表示Barrier将被打破,打破后,brokenBarrier action 则执行;然后所有await的线程激活,继续执行;同时 Barrier对象重置,计数恢复。

  3. reset:
    重置,Barrier 前阻塞等待的线程被唤醒继续执行;未进入barrier的线程,来到时抛异常。

  4. getNumberWaiting :
    可获取阻塞线程数,

  5. isBroken:
    Barrier会被破坏,比如线程异常,被中断,await()超时,reset被调用。

场景案例

  1. 分多次次 检索 聚合
    10个部门,1年12个月份的账目,交给10个线程,分12次检索:每个线程负责一个部,每次取一个月的数据,等10个线程(部门)把当前月的数据都拿到后,聚合运算,然后继续下一个月的数据处理

CountDownLatch vs CyclicBarrier

  1. 都有计数器
  2. 计数的操控方式不同
  • CountDownLatch 计数的方法是countDown()方法,非阻塞
  • CyclicBarrier 计数的方法是 await(),没有非阻塞的计数控制方法。
  1. CyclicBarrier 可重置

相关文章

网友评论

      本文标题:JUC-工具类:2. CyclicBarrier

      本文链接:https://www.haomeiwen.com/subject/nvavektx.html