赣州新闻网

首页 / 科技

Java多线程工具类之循环栅栏计数器

2020-04-09 · 赣州新闻网 · 科技

Java多线程下循环计数器

本文主要内容:CyclicBarrier(下文中凯哥就用cycBar来代替)定义介绍;举例说明;代码演示;从源码来看原理及总结;CyclicBarrier与CountDownLatch(下文就用CountDown来代替)比较。

本篇是《凯哥(凯哥Java:kagejava)并发编程学习》系列之《并发工具类》教程的第二篇:《Java多线程下循环计数器》。

Java多线程工具类之循环栅栏计数器

一:CyclicBarrier是什么

cycBar是什么呢?

来看看JDKAPI文档中是怎么介绍这个对象的A P 4 % : * 6 Q:

Java多线程工具类之循环栅栏计数器


翻译后大概意思:允许一组线程全部等待彼此达到共同的屏障点的同步辅助。循环阻塞在涉及固定大小的线程方的程序中很有用,这g S ? ( D G些线程必须偶尔等待彼此。屏障被称为循环 ,因为它可以在等待的线程被释放之后重新s / V 8 s使用。

有没有这种感觉:S j B x *每个汉字都认识,但是放在一起就不知道什么意` 0 + : 8 *思了?对!没错,就是这种感觉~~~///(^v^)\\\\\\~~~。上面G Y i k O 5 $ n ^ Z生活中的例子。

二:CyclicBarrier生活中例子理解

在生活中,如果我们跟团旅游的话,就更容易理解W P s J l G R了。假设一个团有7个人,旅游团安排的旅游路线是八达岭长城故宫这个路线的一日游。游玩时间是3小时。三个小时后, 统一都到八达岭的集合点:入口处。点名等人员都到齐后,发车到下一个景点。这种场景相信大家都遇到过吧。八达岭入口的集合点不仅仅这个旅游团可以使用,其他的旅游团都可以使用的。如果站在多线程并发场u 5 ? Q ! o景下来分析的话:旅游团中每个成员都是一个线程,入口集合点就是屏障(Barrier),每个成员都必须到达集合点(循环到达Cyclic)且人数和旅游团人数相等的时候,才能触发旅游车发车去下一个景点的线程B D h } J c。

还有一个例子更容易理解:集齐七龙珠,召唤神龙。相信看过《七龙$ 2 b W J 0 r B v V . ] h J k?下面凯哥(kaigejava)将通过代码实现集齐七龙珠召唤神龙的操作。

三:代码D k a _ m 7 h R a演示

需求:集齐七颗龙珠,召唤神龙。

3.1:未使用cW e L 7 u Z 0ycba; ] C n { W O Qrr的时候

使用七个线程,来8 o y g 9代替找龙珠的七个任务。每个线程在找龙珠的时候,耗时2s.就sleep。最后,七个线程执行完成之后,使用召唤神龙的线程来召唤神龙。a - x法主要干了什么?其实逻辑处理x K T o @比较简单的。如: G y ]果当前线程不是最后一个调用await方法的线程,则会一直自旋等待着。源码如下:

Java多线程工具类之循环栅栏计数器


当发生以下清空的时候,就会在自旋等待了:

1:当前执行的线程是最后一个线程。即index == 0成立的时候;

2:当参与其中的某个线程在等待的时候,等待超时了;

3:参与的线程中某一个线程被3 ) ; e ; i h中断了;

4:在调用了CycBarr的reset方法后。T N Q _ x中统计数量的时候,可以使用CycBarr来从不同L n r的excel读取到数据之后,在进行汇总操作。

生活需求文章内容等人线程工具循环崇义