package com.duchong.concurrent;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Exchanger; /**
* Exchanger用于进行线程间的数据交换。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过exchange方法交换数据,
* 如果第一个线程先执行exchange()方法,它会一直等待第二个线程也执行exchange方法,当两个线程都到达同步点时,这两个线程就可以交换数据,
* 将本线程生产出来的数据传递给对方。
* @author DUCHONG
* @since 2019-09-18 10:20
**/
public class ExchangeDemo { static final Exchanger<List<String>> exchanger = new Exchanger<>(); public static void main(String[] args) { new Thread(()->putDataA()).start(); new Thread(()->putDataB()).start(); } public static void putDataA(){ System.out.println("putDataA:");
String name = Thread.currentThread().getName();
System.out.println(name);
try {
List<String> list = new ArrayList<>();
list.add(name+"---a1");
list.add(name+"---a2"); list = exchanger.exchange(list); for(String data:list){
System.out.println("putDataA:"+data);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
} public static void putDataB(){ System.out.println("putDataB:");
String name = Thread.currentThread().getName();
System.out.println(name);
try { List<String> list = new ArrayList<>();
list.add(name+"---b1");
list.add(name+"---b2");
list.add(name+"---b3");
list.add(name+"---b4");
list.add(name+"---b5"); Thread.sleep(2000);
list = exchanger.exchange(list); for(String data:list){
System.out.println("putDataB:"+data);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
} }

最新文章

  1. ASP.NET免费服务器~支持MVC和Net4.5
  2. Windows进程间通信—命名管道
  3. Util应用程序框架公共操作类(八):Lambda表达式公共操作类(二)
  4. GO语言练习:channel 缓冲机制
  5. bzoj3035: 导弹防御塔
  6. 如何设置适当的ramp-up period值
  7. BZOJ 4127 Abs 解题报告
  8. Oracle数据库之PL/SQL包
  9. Error (0xc0000225) installing Windows 8 R2 on VirtualBox
  10. digitalocean纽约机房最先开通IPv6
  11. .net 图片压缩
  12. 简单使用sp_executesql 参数化
  13. H5页面测试实战总结
  14. day14
  15. mqtt mosquitto 源码安装
  16. hexo+next主题目录解析
  17. 第二十七篇-新建Activity
  18. Deploy, Issue and Transfer Tokens
  19. VS在解决方案中添加一个别人给的项目,我自己的项目主窗体中不能调用
  20. JDK的下载及配置

热门文章

  1. Python + Apache Kylin 让数据分析更加简单!
  2. Ubuntu shell系统的环境变量
  3. C语言实现金字塔
  4. 洛谷 P1855 榨取kkksc03 题解
  5. 洛谷P2456 二进制方程
  6. segfault at 0 ip sp error 14
  7. (5)Go数组
  8. CF1163F Indecisive Taxi Fee(线段树+图论)
  9. CodeForces 1202F(数论,整除分块)
  10. layui select多选下拉显示 以及回显