1.基本概念

Exchanger,从名字上理解就是交换。Exchanger用于在两个线程之间进行数据交换,注意也只能在两个线程之间进行数据交换。

线程会阻塞在Exchanger的exchange方法上,直到另外一个线程也到了同一个Exchanger的exchange方法时,二者进行数据交换,

然后两个线程继续执行自身相关的代码。

2.抽像模型

线程同步、线程通信

3.使用场景

两个线程之间交换数据(没有更好的例子了)

4.Exchanger使用api

     Exchanger<E> exchanger = new Exchanger<E>();
    exchanger.exchange(num); //当前执行线程等待另一个线程执行此行代码,完成变量num的交换

5.示例

    private static class ExchangeThread extends Thread{
private Integer num;
private Exchanger<Integer> exchange;
private int sleepTime;
public ExchangeThread(Integer num, Exchanger<Integer> exchange, int sleepTime) {
super();
this.num = num;
this.exchange = exchange;
this.sleepTime = sleepTime;
}
@Override
public void run() {
System.out.println(this.getName() + "线程开始工作了,当前号码是" + num + ",当前时间" + System.currentTimeMillis());
try {
Thread.sleep(sleepTime);
num = exchange.exchange(num);
System.out.println(this.getName() + "线程开始完成了工作,当前号码是" + num + ",当前时间" + System.currentTimeMillis()); } catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} super.run();
}
} 执行结果
Thread-1线程开始工作了,当前号码是2,当前时间1555346410059
Thread-0线程开始工作了,当前号码是1,当前时间1555346410059
Thread-1线程开始完成了工作,当前号码是1,当前时间1555346418065
Thread-0线程开始完成了工作,当前号码是2,当前时间1555346418065

最新文章

  1. java排序学习笔记
  2. python练手基础
  3. javascript - 可编辑表格控件 支持全键盘操作(无JS框架)
  4. laravel 实现上传 excel
  5. linux指令(一)文件的操作
  6. js自执行函数的几种不同写法的比较
  7. 字符输入流Reader简要概括
  8. Mysql常用的一些技巧命令
  9. 我要阻止做java开发的男朋友去创业型公司工作吗?
  10. 新鲜出炉的30个精美的 jQuery &amp; CSS3 效果【附演示和教程】
  11. jQuery 删除或是清空某个HTML元素示例
  12. Delimiter must not be alphanumeric or backslash 问题及解决
  13. C++ 智能指针auto_ptr详解
  14. CoreAnimation6-基于定时器的动画和性能调优
  15. SRM 393(1-250pt)
  16. UVA_埃及分数(Hard Version) UVA 12588
  17. android4.0移植,拨号异常
  18. C++经典书目索引及资源下载
  19. css 开发心得
  20. CSS input type=&quot;number&quot;出现上下箭头时解决方案

热门文章

  1. 4--Postman--Request&amp;Response
  2. 调试利器GDB(下)
  3. flutter 添加插件
  4. MATLAB 进行五种边缘检测
  5. javaWeb-Servlet工作原理
  6. MySQL Workbench 创建数据库,添加新表,添加字段
  7. JVM垃圾回收机制之对象回收算法
  8. Ex0203
  9. creator rotationY的问题
  10. 记NOIP2018