线程工具CyclicBarrier
【摘要】 CyclicBarrier工具的作用:
控制线程池中的所有线程全执行到某一个集合点时(即某一行代码)时,所有线程才能继续执行一集合点后面的代码,并前往下一个集合点,哪怕有1个线程还未到,那么其它线程将等待这个线程到达指定集合点。这就好比我们跟团去旅游,只有大家全部到达了指定地点,我们的大巴车才能出发。当我们到达了景区下车自由活动后,所有人员又必须得到第二个指定集合点,我们的...
CyclicBarrier工具的作用:
控制线程池中的所有线程全执行到某一个集合点时(即某一行代码)时,所有线程才能继续执行一集合点后面的代码,并前往下一个集合点,哪怕有1个线程还未到,那么其它线程将等待这个线程到达指定集合点。这就好比我们跟团去旅游,只有大家全部到达了指定地点,我们的大巴车才能出发。当我们到达了景区下车自由活动后,所有人员又必须得到第二个指定集合点,我们的大巴才能回家。依次类推,也可以有第3,第4...个集合点。
示例代
-
package testFuture;
-
import java.util.concurrent.CyclicBarrier;
-
import java.util.concurrent.ExecutorService;
-
import java.util.concurrent.Executors;
-
-
public class CyclicBarrierTest {
-
-
public static void main(String[] args) {
-
ExecutorService service = Executors.newCachedThreadPool();
-
final CyclicBarrier cb = new CyclicBarrier(3);
-
for(int i=0;i<3;i++){
-
Runnable runnable = new Runnable(){
-
public void run(){
-
try {
-
Thread.sleep((long)(Math.random()*10000));
-
System.out.println("线程" + Thread.currentThread().getName() +
-
"即将到达集合地点1,当前已有" + (cb.getNumberWaiting()+1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));
-
cb.await(); //在集合点等待其它线程也执行到这里,然后才能往下执行。
-
-
Thread.sleep((long)(Math.random()*10000));
-
System.out.println("线程" + Thread.currentThread().getName() +
-
"即将到达集合地点2,当前已有" + (cb.getNumberWaiting()+1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));
-
cb.await(); //在集合点等待其它线程也执行到这里,然后才能往下执行。
-
Thread.sleep((long)(Math.random()*10000));
-
System.out.println("线程" + Thread.currentThread().getName() +
-
"即将到达集合地点3,当前已有" + (cb.getNumberWaiting() + 1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));
-
cb.await(); //在集合点等待其它线程也执行到这里,然后才能往下执行。
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
}
-
};
-
service.execute(runnable);
-
}
-
service.shutdown();
-
}
-
}
码如下:
文章来源: blog.csdn.net,作者:冉航--小虾米,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/gaoxiaoweiandy/article/details/116372640
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)