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

  • 相关阅读:
    2018-2019-1 20165313 20165212 20165222 实验二 固件程序设计
    2018-2019-1 20165313 20165212 2016522 实验一 开发环境的熟悉
    课程总结
    2017-2018-2 20165222 实验五《网络编程与安全》实验报告
    2017-2018-2 20165222实验四《Android程序设计》实验报告
    20165222 第十周课下补做
    20165222 实验三 敏捷开发与XP实践
    各种树
    【面试】MySQL
    Redis
  • 原文地址:https://www.cnblogs.com/kaka-qiqi/p/14916263.html
Copyright © 2011-2022 走看看