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线程的数据 ...
随机推荐
- arcgis_engine_develop_error_42
解决: 今天在VS2013打开程序时,手工添加了pageLayoutControl隔一会弹出错误窗口:Provide your license server administrator with th ...
- 在MFC中,使用控制台Console输出调试信息
1.在MFC的应用类的InitInstance()函数里添加: AllocConsole(); 有时候需要调整这行代码在InitInstance函数的位置 2.继续添加以下代码 freopen(&qu ...
- c++程序设计之编程思想
代码块愈小,代码的功能就愈容易管理,代码的处理和移动就愈轻松. 任何一个傻瓜都能写出计算机可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员. 绝大多数情况下,函数应该放在它所使用的数据的所 ...
- NPM 相关
1. 官方网站 https://docs.npmjs.com/ 2. 显示Global Module安装过什么 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font ...
- TortoiseGit 图标不显示
1. 确认注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdent ...
- DataRow循环取出
string strName = null; DataRow dRow = DB.GetDataRow(Sql语句); if (null != dRow) { foreach (DataRow ite ...
- android 自定义alertdialog和取消dialog
看代码: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle ...
- MSSQL日志传送出现“LSN 太晚,无法应用到数据库”
一个月之前配置了日志传送的数据库,在今天早上收到作业警报:"LSRestore_ServerName_Databasename"运行失败,到历史记录中查看,错误信息如下 消息 20 ...
- Eclipse设置、调优、使用(转自)
转自http://yuanzhifei89.iteye.com/blog/974082 eclipse调优 一般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡 ...
- Android Volley完全解析(一),初识Volley的基本用法
1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android 系统中主要提供了两种方式来进行 ...