学习实践 JDK5 concurrent 并行包之CyclicBarrier _Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2106 | 回复: 0   主题: 学习实践 JDK5 concurrent 并行包之CyclicBarrier         下一篇 
koei666
注册用户
等级:新兵
经验:61
发帖:63
精华:0
注册:2012-1-9
状态:离线
发送短消息息给koei666 加好友    发送短消息息给koei666 发消息
发表于: IP:您无权察看 2015-4-2 14:58:16 | [全部帖] [楼主帖] 楼主

介绍CyclicBarrier类,该类通ReentrantLock 跟Condition。Barrier 顾名思义,只有所有线程数达到规定的数量时,它才会被触发执行。

如下段代码 只有线程12都执行时,才会执行它定义的线程。

package net.vincent.study.other;

2

3 import java.util.concurrent.BrokenBarrierException;

4 import java.util.concurrent.CyclicBarrier;

5

6 public class part1 {

    7

    8 /**

    9 * This static mehthod create CyclicBarrier, and this barrier will sleep 1000 if number of count arrive

    10 * @param number of count

    11 * @return a CyclicBarrier that will sleep if number of await thread invoke.

    12 */

    13

    14 public static CyclicBarrier getCyclicBarrier(int count){

    15 if(count <=0)return null;

    16 final CyclicBarrier cyclicBarrier = new CyclicBarrier(count,new Runnable(){

    17 public void run(){

    18 try {

    19 Thread.sleep(1000);

    20 } catch (InterruptedException e) {

    21 e.printStackTrace();

    22 }

    23 System.out.println("conditon is arrive and CycleBarrier is running");

    24 }

    25 });

    26 return cyclicBarrier;

    27 }

    28 /**

    29 * Create

    30 * @param nameOfThread

    31 * @param cyclicBarrier

    32 * @return

    33 */

    34 public static Thread getThread(String nameOfThread ,final CyclicBarrier cyclicBarrier ){

    35 Thread thread= new Thread(nameOfThread){

    36 public void run(){

    37 System.out.println(this.getName()+"is begin; and count is "+(++count));

    38 try {

    39 cyclicBarrier.await();

    40 } catch (InterruptedException e) {

    41 // TODO Auto-generated catch block

    42 e.printStackTrace();

    43 } catch (BrokenBarrierException e) {

    44 // TODO Auto-generated catch block

    45 e.printStackTrace();

    46 }

    47 System.out.println(this.getName()+"finished");

    48 }

    49 };

    50 return thread;

    51

    52 }

    53

    54 static int count = 0;

    55 public static void main(String[] args) {

    56 /** define a cyclicBarrier and number of barrier is 2.*/

    57 CyclicBarrier cyclicBarrier = getCyclicBarrier(2);

    58 Thread threadOne = getThread("threadOne",cyclicBarrier);

    59 threadOne.start();

    60 Thread threadTwo = getThread("threadTwo",cyclicBarrier);

    61 threadTwo.start();

    62

    63

    64 }

    65

    66

67 }

68

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论