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时执行的命令		  

  

    

你可能感兴趣的:(thread,J#)