黑马程序员技术交流社区
标题:
【广州校区】+【原创】+ 并发编程之CyclicBarrier
[打印本页]
作者:
jianhong
时间:
2019-1-15 15:24
标题:
【广州校区】+【原创】+ 并发编程之CyclicBarrier
一,有这样一个需求,旅游团,旅行出发前必须等待人都到齐了才出发,我们可以使用CyclicBarrier来实现二,CyclicBarrier提供了await()方法实现所有线程的阻塞,等所有线程都进来后才执行await()方法后的代码,代码如下:
public class
CyclicBarrierTest {
public static void
main
(String[] args) {
//阻塞线程
CyclicBarrier cb =
new
CyclicBarrier(
5
)
;
ExecutorService service = Executors.
newCachedThreadPool
()
;
for
(
int
i=
1
;
i<=
5
;
i++){
final int
u = i
;
Runnable r =
new
Runnable() {
@Override
public void
run
() {
try
{
Thread.
sleep
((
long
) (Math.
random
()*
1000
))
;
System.
out
.println(
u
+
"到达集合地点,"
+
"当前有"
+(
cb
.getNumberWaiting()+
1
)+
"个人在等待"
)
;
cb
.await()
;
//阻塞点
System.
out
.println(
"人到齐了可以出发去旅游了"
)
;
}
catch
(Exception e) {
e.printStackTrace()
;
}
}
}
;
service.execute(r)
;
}
service.shutdown()
;
}
}
三,执行完后控制台将输出
4到达集合地点,当前有1个人在等待
1到达集合地点,当前有2个人在等待
2到达集合地点,当前有3个人在等待
3到达集合地点,当前有4个人在等待
5到达集合地点,当前有5个人在等待
人到齐了可以出发去旅游了
人到齐了可以出发去旅游了
人到齐了可以出发去旅游了
人到齐了可以出发去旅游了
人到齐了可以出发去旅游了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2