CyclicBarrier的介绍

     

        一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。

CyclicBarrier 支持一个可选的 Runnable 命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。若在继续所有参与线程之前更新共享状态,此屏障操作 很有用。 

      举个例子,多个线程调用,如果想要在多个线程每运行N次后,相互访问一次,这种可以映射到遗传算法的并行中去,种群之间每隔K代就相互交流一次。

public class demo6 {
    public static void main(String[] args) {
         CyclicBarrier barrier = new CyclicBarrier(5,new Runnable() {
            
            @Override
            public void run() {
                System.out.println("=======================");
                
            }
        });
         new Thread(new thread(1,"周一",barrier    )).start();
         new Thread(new thread(2,"赵二",barrier    )).start();
         new Thread(new thread(3,"张三",barrier    )).start();
         new Thread(new thread(4,"李四",barrier    )).start();
         new Thread(new thread(5,"王五",barrier    )).start();
    }
}


class thread implements Runnable {
    private int id;//标识每个线程
    private String data;
    private static String[] sourse = new String[5] ;
    CyclicBarrier barrier;

    public thread(int id, String data, CyclicBarrier barrier) {
        this.id = id;
        this.data = data;
        this.barrier = barrier;
    }

    public void run()
    {
          try{
          for(int i = 0 ; i < 10 ; i ++){
            for(int j = 0 ; j <10 ; j ++)
            {
                //执行各自种群之间进化,隔十代就会进行一次种群交流
            }
            sourse[id-1] = data;
            barrier.await();
            data= sourse[(id)%5] ; 
            System.out.println(id +"  "+ data);
            barrier.await();
          }
          }catch(Exception e)
          {
              e.printStackTrace();
          }

    }
}

 

 

每隔10带,就会改变一次data 的值。

 

 

=======================
1  赵二
4  王五
5  周一
2  张三
3  李四
=======================
=======================
2  李四
4  周一
1  张三
3  王五
5  赵二
=======================
=======================
3  周一
2  王五
5  张三
1  李四
4  赵二

 

posted on 2015-07-29 11:24  麦田里的稻草人19994  阅读(194)  评论(0编辑  收藏  举报