zoukankan      html  css  js  c++  java
  • CyclicBarrier用法

    image
    CyclicBarrier是所有线程都到了指定的个数,才开始执行下边的代码。

    public class CyclicBarrierDemo {
    	
    //	private static String[] arr = {"小王","小张","小李","小赵","小丽","小陈","小孙","小郭","小吴","小钱"};
    	private static String[] arr = {"小王","小张","小李","小赵","小丽"};
    
    	public static void main(String[] args)throws Exception{
    		changjing();
    	}
    
    	public static void changjing()throws Exception{
    		CyclicBarrier cyclicBarrier = new CyclicBarrier(5,new Runnable() {
    	        @Override
    	        public void run() {
    	            System.out.println("5人已来,可以开席了");
    	        }
    	    });
    		for (int i = 0; i < 10; i++) {
    			final int index = i;
    			Thread.sleep(1000);
    			new Thread(()->{
    				try {
    					System.out.println(arr[index] + "要来了");
    					cyclicBarrier.await();
    					System.out.println(arr[index] + "开始吃了");
    				} catch (Exception e) {
    					
    				}
    			},"线程" + i).start();
    		}
    	}
    }
    
    • 输出的结果(5个人都执行到了await方法,然后就可以执行run方法了,之后就可以执行之后的代码了)
    小王要来了
    小李要来了
    小赵要来了
    小张要来了
    小丽要来了
    5人已来,可以开席了
    小丽开始吃了
    小王开始吃了
    小赵开始吃了
    小张开始吃了
    小李开始吃了
    

    重点

    这个跟CountdownLatch不一样的是,CountdownLatch是一次性的,而CycliBarrier是可以重复使用的,只需调用一下reset方法。

    CountDownLatch与CyclicBarrier

    CountDownLatch和CyclicBarrier都能够实现线程之间的等待,只不过它们侧重点不同:

    CountDownLatch一般用于一个或多个线程,等待其他线程执行完任务后,再才执行
    CyclicBarrier一般用于一组线程互相等待至某个状态,然后这一组线程再同时执行
    另外,CountDownLatch是减计数,计数减为0后不能重用;而CyclicBarrier是加计数,可置0后复用。

    参考博客:
    https://zhuanlan.zhihu.com/p/265530418

  • 相关阅读:
    Docker找不到私有nuget服务
    EF中字符串转数字排序
    一个简单的注册页面
    【转】【数据库SQL】SQL查询和替换含有回车,空格,TAB,等
    RGB颜色记录
    javascript中event.keycode
    java基础总结
    面试干货
    jQuery、实例大全
    使用Sql按日期条件查询
  • 原文地址:https://www.cnblogs.com/kaka-qiqi/p/14916263.html
Copyright © 2011-2022 走看看