1700451790
编写高质量代码:改善Java程序的151个建议 建议131:CyclicBarrier让多线程齐步走
1700451791
1700451792
思考这样一个案例:两个工人从两端挖掘隧道,各自独立奋战,中间不沟通,如果两人在汇合点处碰头了,则表明隧道已经挖通。这描绘的也是在多线程编程中,两个线程独立运行,在没有线程间通信的情况下,如何解决两个线程汇集在同一原点的问题。Java提供了CyclicBarrier(关卡,也有翻译为栅栏)工具类来实现,代码如下:
1700451793
1700451794
static class Worker implements Runnable{
1700451795
1700451796
//关卡
1700451797
1700451798
private CyclicBarrier cb;
1700451799
1700451800
public Worker(CyclicBarrier_cb){
1700451801
1700451802
cb=_cb;
1700451803
1700451804
}
1700451805
1700451806
public void run(){
1700451807
1700451808
try{
1700451809
1700451810
Thread.sleep(new Random().nextInt(1000));
1700451811
1700451812
System.out.println(Thread.currentThread().getName()+”-到达汇合点”);
1700451813
1700451814
//到达汇合点
1700451815
1700451816
cb.await();
1700451817
1700451818
}catch(Exception e){
1700451819
1700451820
//异常处理
1700451821
1700451822
}
1700451823
1700451824
}
1700451825
1700451826
}
1700451827
1700451828
public static void main(String[]args)throws Exception{
1700451829
1700451830
//设置汇集数量,以及汇集完成后的任务
1700451831
1700451832
CyclicBarrier cb=new CyclicBarrier(2,new Runnable(){
1700451833
1700451834
public void run(){
1700451835
1700451836
System.out.println(“隧道已经打通!”);
1700451837
1700451838
}
[
上一页 ]
[ :1.700451789e+09 ]
[
下一页 ]