Java中CyclicBarrier的用法分析_Java教程-查字典教程网
Java中CyclicBarrier的用法分析
Java中CyclicBarrier的用法分析
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下:publicclassTestCyclicBarrier{privatestaticfinalintTHREAD_NUM=...

复制代码 代码如下:

public class TestCyclicBarrier {

private static final int THREAD_NUM = 5;

public static class WorkerThread implements Runnable{

CyclicBarrier barrier;

public WorkerThread(CyclicBarrier b){

this.barrier = b;

}

@Override

public void run() {

// TODO Auto-generated method stub

try{

System.out.println("Worker's waiting");

//线程在这里等待,直到所有线程都到达barrier。

barrier.await();

System.out.println("ID:"+Thread.currentThread().getId()+" Working");

}catch(Exception e){

e.printStackTrace();

}

}

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

CyclicBarrier cb = new CyclicBarrier(THREAD_NUM, new Runnable() {

//当所有线程到达barrier时执行

@Override

public void run() {

// TODO Auto-generated method stub

System.out.println("Inside Barrier");

}

});

for(int i=0;i<THREAD_NUM;i++){

new Thread(new WorkerThread(cb)).start();

}

}

}

/*

以下是输出:

Worker's waiting

Worker's waiting

Worker's waiting

Worker's waiting

Worker's waiting

Inside Barrier

ID:12 Working

ID:8 Working

ID:11 Working

ID:9 Working

ID:10 Working

*/

1. CyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await()进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续。

2. CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍。

3. CyclicBarrier初始时还可带一个Runnable的参数, 此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Java学习
    热门Java学习
    编程开发子分类