java多线程之CyclicBarrier的使用方法

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

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

标签:java,多线程,CyclicBarrier
0
投稿

猜你喜欢

  • 详解Spring的两种代理方式:JDK动态代理和CGLIB动态代理

    2023-08-08 14:38:37
  • springboot 多数据源的实现(最简单的整合方式)

    2022-08-20 02:30:11
  • java ReentrantLock条件锁实现原理示例详解

    2023-12-12 02:36:13
  • c#图片缩放图片剪切功能实现(等比缩放)

    2022-08-17 04:46:13
  • C#中流的使用和分类

    2022-10-04 22:17:41
  • SpringBoot实现配置文件的替换

    2023-11-21 22:27:16
  • 详解Java中final的用法

    2022-09-22 10:20:32
  • 使用注解@Validated效验VO参数是否合规

    2023-10-27 20:13:01
  • java 创建线程的方法总结

    2023-02-25 20:20:30
  • Javaweb基础入门requse原理与使用

    2021-10-07 20:55:29
  • Android AIDL和远程Service调用示例代码

    2022-07-14 03:06:15
  • 本地jvm执行flink程序带web ui的操作

    2022-09-03 20:49:00
  • C#中事件只能在内部调用的原因分析

    2023-08-09 05:07:00
  • C#中析构函数、Dispose、Close方法的区别

    2022-06-11 21:20:54
  • java编程调用存储过程中得到新增记录id号的实现方法

    2022-06-09 02:55:52
  • Maven引入外部jar的几种方法(小结)

    2022-11-10 01:35:30
  • JavaWeb开发中alias拦截器的使用方法

    2023-08-20 10:36:55
  • 详解Java的文件与目录管理以及输入输出相关操作

    2022-05-03 15:07:22
  • 浅谈Android串口通讯SerialPort原理

    2023-03-31 12:39:52
  • C#使用DropDownList绑定添加新数据的方法汇总

    2023-05-08 03:20:56
  • asp之家 软件编程 m.aspxhome.com