软件编程
位置:首页>> 软件编程>> java编程>> java多线程之CyclicBarrier的使用方法

java多线程之CyclicBarrier的使用方法

作者:chuyouyinghe  发布时间:2023-11-04 21:52:54 

标签:java,多线程,CyclicBarrier

java多线程之CyclicBarrier的使用方法


public class CyclicBarrierTest {

public static void main(String[] args) {
   ExecutorService service = Executors.newCachedThreadPool();
   final CyclicBarrier cb = new CyclicBarrier(3);
   for(int i=0;i<3;i++){
     Runnable runnable = new Runnable(){
         public void run(){
         try {
           Thread.sleep((long)(Math.random()*10000));  
           System.out.println("线程" + Thread.currentThread().getName() +  
               "即将到达集合地点1,当前已有" + (cb.getNumberWaiting()+1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));            
           cb.await();

Thread.sleep((long)(Math.random()*10000));  
           System.out.println("线程" + Thread.currentThread().getName() +  
               "即将到达集合地点2,当前已有" + (cb.getNumberWaiting()+1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));
           cb.await();  
           Thread.sleep((long)(Math.random()*10000));  
           System.out.println("线程" + Thread.currentThread().getName() +  
               "即将到达集合地点3,当前已有" + (cb.getNumberWaiting() + 1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));            
           cb.await();            
         } catch (Exception e) {
           e.printStackTrace();
         }        
       }
     };
     service.execute(runnable);
   }
   service.shutdown();
 }
}

运行结果如下:


线程pool-1-thread-3即将到达集合地点1,当前已有1个已经到达,正在等候
线程pool-1-thread-1即将到达集合地点1,当前已有2个已经到达,正在等候
线程pool-1-thread-2即将到达集合地点1,当前已有3个已经到达,都到齐了,继续走啊
线程pool-1-thread-3即将到达集合地点2,当前已有1个已经到达,正在等候
线程pool-1-thread-1即将到达集合地点2,当前已有2个已经到达,正在等候
线程pool-1-thread-2即将到达集合地点2,当前已有3个已经到达,都到齐了,继续走啊
线程pool-1-thread-1即将到达集合地点3,当前已有1个已经到达,正在等候
线程pool-1-thread-3即将到达集合地点3,当前已有2个已经到达,正在等候
线程pool-1-thread-2即将到达集合地点3,当前已有3个已经到达,都到齐了,继续走啊

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

来源:http://blog.csdn.net/chuyouyinghe/article/details/46700503

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com