码迷,mamicode.com
首页 > 编程语言 > 详细

CyclicBarrier在多线程同步运行后相互访问的问题。

时间:2015-07-29 12:05:19      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

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  赵二

 

CyclicBarrier在多线程同步运行后相互访问的问题。

标签:

原文地址:http://www.cnblogs.com/wuwenhui/p/4685444.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!