您的位置:首页 > 编程语言 > Java开发

java CyclicBarrier (栅栏) 作用是使 指定个数的请求线程互相等待, 拦截在某个公共屏障点(就是栅栏外面)然后全到齐了一起访问这个屏障点的内容

2015-03-19 16:47 363 查看
package test;

import java.util.concurrent.BrokenBarrierException;

import java.util.concurrent.CyclicBarrier;

public class Beer {

public static void main(String[] args) {

//设置线程个数

final int count = 5;

final CyclicBarrier barrier = new CyclicBarrier(count, new Runnable() {

@Override

public void run() {

//这里就相当于 一个公共的屏障点---------------------------------------------------------------①

System.out.println("drink beer!");

}

});

// they do not have to start at the same time...

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

new Thread(new Worker(i, barrier)).start();

}

}

}

//线程逻辑处理

class Worker implements Runnable {

final int id;

final CyclicBarrier barrier;

public Worker(final int id, final CyclicBarrier barrier) {

this.id = id;

this.barrier = barrier;

}

@Override

public void run() {

try {

System.out.println(this.id + "starts to run !");

Thread.sleep((long) (Math.random() * 10000));

System.out.println(this.id + "arrived !");

//当线程走到这里时就会在栅栏外面等着。。等其他几个没到栅栏前的线程 直到所有(5个)线程都到达后采取访问①的公共代码

this.barrier.await();

} catch (InterruptedException e) {

e.printStackTrace();

} catch (BrokenBarrierException e) {

e.printStackTrace();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐