专栏首页吉林乌拉CyclicBarrier的使用

CyclicBarrier的使用

CyclicBarrier和CountDownLatch一样在使用时也需要在构造方法中传递一个int类型的参数,但这个参数代表的含义和在使用上与CountDownLatch有所区别,这个参数代表的是拦截线程的数量,当线程调用CyclicBarrier中的await()方法时,就是告诉CyclicBarrier我已经拦截了当前线程,也就是此时调用await()方法的线程将被阻塞,线程中await()方法后面的代码将不会执行,当前线程会一直等待,一到调用await()方法的线程数量与CyclicBarrier构造方法中参数的数量一致时,线程才会重新执行。下面我们看一下简单的例子来演示一下CyclicBarrier的使用。

下面我们详细分析一下输出的信息。我们在CyclicBarrier构造方法中传递的参数是2也就是说它要拦截2个线程的await()方法后才会执行await()方法后面的逻辑。所以在调用await()方法之前线程是不会阻塞的。所以会出输出开始、计时等信息,我们会发现当线程Thread-1已经执行完循环任务时,并没有马上输出await()方法后面的代码,而是此线程阻塞了,原因是Thread-0还没有实现完,它还没有执行await()方法,也就是说拦截的线程数量还没有达到CyclicBarrier构造方法中传递数量,所以线程Thread-1就会一直阻塞直到Thread-0执行完循环并执行await()方法时,此时拦截的线程数量已经等于构造方法中的参数了,所以线程Thread-1才会恢复执行。这就是CyclicBarrier的使用。

CyclicBarrier与CountDownLatch的区别:

  • CountDownLatch阻塞的是主线程
  • CountDownLatch的计数器只能使用一次也就是只能递减
  • CyclicBarrier阻塞的是子线程
  • CyclicBarrier的计数器可以使用reset()方法重置

CyclicBarrier还提供了另一个构造方法除了传递int类型的参数外,还可以传递一个Runnable类型。它的目的是,当线程的拦截的数量与构造方法的参数相等时,优先执行构造方法里的任务,然后在执行每个线程中await()方法后面的代码。

本文分享自微信公众号 - 吉林乌拉(jilinwulacom),作者:吉林乌拉

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • getHoldCount、getQueueLength、getWaitQueueLength方法的使用

    getHoldCount():查询当前线程保持锁定的个数,也就是调用lock()方法的次数。

    吉林乌拉
  • Semaphore的使用

    Semaphore的作用是控制线程的并发数量。在简单点的解释就是如果我们开始了10个线程都在处理任务,如果我们用到的Semaphore,那么可以让这10个并发任...

    吉林乌拉
  • Java中volatile关键字的使用

    volatile关键字的作用就是使变量在多个线程间可见。这到底是什么意思呢?我们先看下面的事例然后在详细说明。

    吉林乌拉
  • java线上服务问题排查总结

    版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://b...

    shaonbean
  • C++-入门语法(四)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • 九度Online Judge 题目1432:叠筐 解答

    提交网址: http://ac.jobdu.com/problem.php?pid=1432

    Enjoy233
  • C#多线程之旅(7)——终止线程

    Jackson0714
  • Spring官网阅读系列(五):BeanDefinition(下)

    在上篇文章中,我们学习了BeanDefinition的一些属性,其中有以下几个属性:

    秃顶的Java程序员
  • Spring官网阅读(五)BeanDefinition(下)

    在上篇文章中,我们学习了BeanDefinition的一些属性,其中有以下几个属性:

    程序员DMZ
  • SQL学习笔记之MySQL查询练习2

    github地址: https://github.com/nql1314/sql-practises

    Jetpropelledsnake21

扫码关注云+社区

领取腾讯云代金券