zoukankan      html  css  js  c++  java
  • java多线程系列9 高级同步工具(3) CyclicBarrier

    CyclicBarrier 

     一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)   然后一再执行

     

    public class CyclicBarrierTest {
    
         
         public static void main(String[] args) {
        	 ExecutorService pool = Executors.newFixedThreadPool(3);
        	 //这里定义的是3 也就是必须三个线程中 都调用了barrier.await()方法才可以执行await后面的代码 不然一直等待
        	 CyclicBarrier barr = new CyclicBarrier(3);
        	pool.submit( new Thread(new Runner(barr, "c1")));
        	pool.submit( new Thread(new Runner(barr, "c2")));
        	pool.submit( new Thread(new Runner(barr, "c3")));
        	 pool.shutdown();
    	}
    }
    class Runner implements Runnable{
    	private   CyclicBarrier barrier ;
    	private String name ;
    	
    	public Runner(CyclicBarrier barrier, String name) {
    		super();
    		this.barrier = barrier;
    		this.name = name;
    	}
    
    	@Override
    	public void run() {
    		try {
    			Thread.sleep(1000);
    		} catch (InterruptedException e1) {
    			e1.printStackTrace();
    		}
    		System.out.println(name+" 准备 ");
    		try {
    			 // await方法,在所有参与者都已经在此 barrier 上调用 await 方法之前,将一直等待。
    			barrier.await();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		System.out.println(name+" go ");
    	}
    	 
     }
    

        运行结果如下

      

     在这里 需要说下和CountDownLatch的区别

      CountDownLatch 阻塞的是 主线程 

      CyclicBarrier  阻塞的是子线程

      CountDownLatch是不能够重用的,而CyclicBarrier是可以重用的。

  • 相关阅读:
    第12组 Alpha冲刺(4/6)
    第12组 Alpha冲刺(3/6)
    第12组 Alpha冲刺(2/6)
    2019软件工程实践——第四次作业
    2019软件工程实践——第三次作业
    2019软件工程实践——第二次作业
    2019软件工程实践——第一次作业
    博客园 自定义背景图片(包括动图)
    软件工程 实验一 GIT代码版本管理
    WordCounter项目(基于javase)
  • 原文地址:https://www.cnblogs.com/javabigdata/p/6946346.html
Copyright © 2011-2022 走看看