浅谈Java中CyclicBarrier的用法

news/2024/7/24 8:40:29

CyclicBarrier和CountDownLatch一样,都是关于线程的计数器。

用法略有不同,测试代码如下:

 1 public class TestCyclicBarrier {
 2 
 3     private static final int THREAD_NUM = 5;
 4     
 5     public static class WorkerThread implements Runnable{
 6 
 7         CyclicBarrier barrier;
 8         
 9         public WorkerThread(CyclicBarrier b){
10             this.barrier = b;
11         }
12         
13         @Override
14         public void run() {
15             // TODO Auto-generated method stub
16             try{
17                 System.out.println("Worker's waiting");
18                 //线程在这里等待,直到所有线程都到达barrier。
19                 barrier.await();
20                 System.out.println("ID:"+Thread.currentThread().getId()+" Working");
21             }catch(Exception e){
22                 e.printStackTrace();
23             }
24         }
25         
26     }
27     
28     /**
29      * @param args
30      */
31     public static void main(String[] args) {
32         // TODO Auto-generated method stub
33         CyclicBarrier cb = new CyclicBarrier(THREAD_NUM, new Runnable() {
34             //当所有线程到达barrier时执行
35             @Override
36             public void run() {
37                 // TODO Auto-generated method stub
38                 System.out.println("Inside Barrier");
39                 
40             }
41         });
42         
43         for(int i=0;i<THREAD_NUM;i++){
44             new Thread(new WorkerThread(cb)).start();
45         }
46     }
47 
48 }
49 /*
50 以下是输出:
51 Worker's waiting
52 Worker's waiting
53 Worker's waiting
54 Worker's waiting
55 Worker's waiting
56 Inside Barrier
57 ID:12 Working
58 ID:8 Working
59 ID:11 Working
60 ID:9 Working
61 ID:10 Working
62 */
  1.  CyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await()进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续。 
  2.  CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍。 
  3.  CyclicBarrier初始时还可带一个Runnable的参数, 此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。

 

转载于:https://www.cnblogs.com/techyc/archive/2013/03/13/2957059.html


http://www.niftyadmin.cn/n/1834463.html

相关文章

淘宝店铺搜索工具(提升淘宝店铺排名人气)

这个程序主要是用来查找淘宝店铺的位置。然后用相应的工具去刷流量&#xff0c;工具我已经打包在一起。 举个例子&#xff0c;假如你的淘宝店是卖衣服的&#xff0c;某位用户想买衣服&#xff0c;一般会输入T恤&#xff0c;你的店铺虽然有T恤&#xff0c;但是会不会在第一或者首…

[Angular实战网易云]——18、面板优化

优化 封装Actions 将重复使用到的功能封装成单独的类来降低系统的耦合性 在Store目录下新增服务类 batch-actions.ts ng g s batch-actions注入Store并且订阅动作 batch-actions.ts private playState: PlayState;constructor(private store$: Store<AppStoreModule>,…

vue使用mint实现右划删除

template: <template><div class"sLocation"><mt-cell-swipe :right"[{content: 删除,style: { background: #f66, color: #fff },handler: () > unfollow(item)}]" v-for"item in 10" :key"item"><div clas…

Linux服务器监控脚本

Linux性能监控脚本一 资源性能监控1 系统负载2 CPU空间3 内存、交换分区4 磁盘空间5 用户性能数据记录 超过警告值报警通知Linux性能监控脚本 /usr/monitor/performance.sh Linux性能监控日志 /usr/monitor/performance/performance_%Y%m%d.log二 进程服务监控1 apache2 mysql3…

在C++中的ODBC API数据库编程

在C中的ODBC API数据库编程 一、动态加载数据源 1、通过修改注册表加载数据源&#xff1a; 用户数据源&#xff1a;HKEY_CURRENT_USER&#xff3c;SOFTWARE&#xff3c;ODBC&#xff3c;ODBC.INI系统数据源&#xff1a;HKEY_LOCAL_MACHINE&#xff3c;SOFTWARE&#xff3c;ODBC…

vue结合android,mint中popup和picker实现省市区三级联动

template: //触发事件 <div :class"{borBm: borBm 4}"><span>通讯住址&#xff1a;</span><span v-if"countyName && countyName ! [请选择]" click"showPopup(1)">{{provinceName}}-{{cityName}}-{{countyNa…

hdu 1070 Milk

虽然是水题&#xff0c;还是由于看题不细wa了几次。 1 #include <iostream>2 #include <cstdio>3 #include <string>4 #include <vector>5 #include <algorithm>6 using namespace std;7 const int everyday_v 200;8 const int drinkday 5;9 s…

QTP

一、下载软件 1、 从Mercury公司网站下载软件 2、 下载地址&#xff1a;http://esd.mercury.com/akdlm/trial/qtp/qtp92.zip 3、 文件大小&#xff1a;417 MB (438,164,273 字节) 二、安装qtp 1、 当出现界面“许可证类型”时候&#xff0c; 选择“单机版&#xff1a;请使用…