CyclicBarrier

     CyclicBarrier同样是一个控制程序并发流程的类。它允许一组线程相互等待,直到到达某个公共的屏障点 Barrier point。在一组固定大小的线程的程序中,这些线程可能需要不时的相互等待。这时就需要用到CyclicBarrier。这也是和CountDownLatch的区别所在。CountDownLatch可以在一个点等待所有线程的返回,但是当count减为0的时候,值是不能重置的。而这个barrier

在释放等待线程以后可以重新使用。所以我们把这个叫做可以循环的barrier。

 

     CyclicBarrier支持一个可选的Runnable命令,在一组线程中的最后一个线程到达之后(在释放所有线程之前),该命令只在每个屏障点运行一次。

    

public class Test {
	private int threadCount;
	private CyclicBarrier barrier;
	private int loopCount = 10;
	
	public Test(int count){
		threadCount=count;
		barrier = new CyclicBarrier(count,new Runnable(){
			public void run(){
				System.out.println("through barrier!");
			}
			
		});
		
		for (int i=0; i< threadCount;i++){
			Thread thread = new Thread("thread"+i){
				public void run(){
					for(int j=0; j<loopCount;j++){
						System.out.println(currentThread().getName()+" is running "+j+"times");
						try{
							barrier.await();
						}catch(Exception e){
							e.printStackTrace();
						}
					}
				}
			};
			thread.start();
		}
	}
	public static void main(String args[]){
	
		Test t = new Test(3);
	}
}
public CyclicBarrier(int parties,
                     Runnable barrierAction) // 创建一个信的CyclicBarrier, 它将在给定数量的参与者处于等待状态的时候启动, 并在启动barrier时执行给定的屏障操作,该操作由最后一个进入barrier的线程执行。   
	      barrierAction:启动barrier时执行的命令		  

  

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值