CyclicBarrier在多线程同步运行后相互访问的问题。
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在多线程同步运行后相互访问的问题。的更多相关文章
- 多台Linux服务器SSH相互访问无需密码--转
一.环境配置 1.系统:CentOS release 5.6 IP:192.168.4.200 主机名:JW01 2.系统:CentOS release 5.9 IP:192.168.4. ...
- HashMap多线程put后get为null和多线程put的时候可能导致元素丢失
一.多线程put后get为null 源码定位 void transfer(Entry[] newTable) { Entry[] src = table; int newCapacity = newT ...
- 解惑:如何使得寝室的电脑和实验室的电脑远程相互访问(Linux和Windows)
解惑:如何使得寝室的电脑和实验室的电脑远程相互访问 一.前言 自从接触计算机网络之后就一直想着把实验室的电脑和自己寝室的电脑远程连接起来,结果总是郁郁不能成功,网上这样的教材也少的可怜,于是总是搁置下 ...
- Python基础(三):简化除法判断、分析apache访问日志、扫描存活主机、利用多线程实现ssh并发访问
一.简化除法判断 目标: 编写mydiv.py脚本,主要要求如下: 提示用户输入一个数字作为除数 如果用户按下Ctrl+C或Ctrl+D则退出程序 如果用户输入非数字字符,提示用户应该输入数字 如果用 ...
- JavaScript-BOM-history:保存当前窗口打开后成功访问过的url历史记录栈
history:保存当前窗口打开后成功访问过的url历史记录栈history.go(n):前进n步前进一步:history.go(1);后退一步:history.go(-1);刷新:history.g ...
- iframe与主框架跨域相互访问方法【转】
转自:http://blog.csdn.net/fdipzone/article/details/17619673 1.同域相互访问 假设A.html 与 b.html domain都是localho ...
- 发布b3log-solo后,访问http://localhost:8080/b3log-solo/提示错误为staticServePath Error。
发布b3log-solo后,访问http://localhost:8080/b3log-solo/提示错误为staticServePath Error. latke.props内容为: serverS ...
- centos下apache安装后无法访问
2013.11.28遇到的问题: -------------------------------------- 一.centos下apache安装后无法访问 得查一下防火墙的问题 iptables添加 ...
- WPF / Win Form:多线程去修改或访问UI线程数据的方法( winform 跨线程访问UI控件 )
WPF:谈谈各种多线程去修改或访问UI线程数据的方法http://www.cnblogs.com/mgen/archive/2012/03/10/2389509.html 子线程非法访问UI线程的数据 ...
随机推荐
- JVM 垃圾回收器工作原理及使用实例介绍(转载自IBM),直接复制粘贴,需要原文戳链接
原文 https://www.ibm.com/developerworks/cn/java/j-lo-JVMGarbageCollection/ 再插一个关于线程和进程上下文,待判断 http://b ...
- sql: 去除数据库表中tab、空格、回车符等特殊字符的解决方法
去除tab.空格.回车符等使用replace语句 按照ASCII码, SELECT char(64) 例如64 对应 @,则select REPLACE('abc@qq.com',char(64),' ...
- Idea CheckStyle 安装
Idea CheckStyle 安装 1. 安装CheckStyle a) 下载idea checksytle 插件 b) 打开Idea的 Settings –>Plugi ...
- [python]获取文件夹下所有文件名
#---picknames.py---import os filenames = os.listdir(os.getcwd()) for name in filenames: print(name)
- Js日期函数Date格式化扩展
prototype是向对象中添加属性和方法,返回对象类型原型的引用,例如对js中日期函数Date进行扩展: Date.prototype.Format = function (fmt) { var o ...
- Runtime Reconfiguration
https://coreos.com/etcd/docs/latest/runtime-configuration.html Runtime Reconfiguration 运行时重新配置 etcd ...
- CSS 中文字体的英文名称 (simhei, simsun) 宋体 微软雅黑
华文细黑:STHeiti Light [STXihei] 华文黑体:STHeiti 华文楷体:STKaiti 华文宋体:STSong 华文仿宋:STFangsong 俪黑 Pro:LiHei Pr ...
- 利用nginx来屏蔽指定的user_agent的访问以及根据user_agent做跳转
对于做国内站的我来说,我不希望国外蜘蛛来访问我的网站,特别是个别垃圾蜘蛛,它们访问特别频繁.这些垃圾流量多了之后,严重浪费服务器的带宽和资源.通过判断user agent,在nginx中禁用这些蜘蛛可 ...
- WinForm窗体嵌入
一.在winform窗体上添加两个控件 1.容器>Panel 2.添加 SideBar.dll (下载链接:http://pan.baidu.com/s/1o6qhf9w) (1)将SideBa ...
- Django中载入javascript、css的操作
url.py中的设置: 导入模块 from django.conf import settings (r'^js/(?P<path>.*)$','django.views.static. ...