Java并发工具类(三)Exchanger

在J.U.C并发包中提供了一些工具类,可以供我们在日常的开发中,根据不同的情况去进行一些相关的并发控制,具体的类有:

CountDownLatch
Semaphore
Exchanger
CyclicBarrier

Exchanger

概念

Exchanger是线程间协作的工具类,Exchanger用于进行线程间的数据交换,它提供一个同步点,在这个同步点,两个线程通过exchange方法交换(共享)彼此的数据。

实现

public static void main(String[] args) {  Exchanger<Integer> exchanger = new Exchanger<>();new Boss(exchanger).start();  new Employee(exchanger).start();  }
class Boss extends Thread {  Exchanger<Integer> exchanger = null;  public Boss(Exchanger<Integer> exchanger) {  super();  this.exchanger = exchanger;  }  @Override  public void run() {  int money = 0;for(int i=0;i<4;i++){money+=100000;try {exchanger.exchange(money);} catch (Exception e) {e.printStackTrace();}}}
}
class Employee extends Thread {  Exchanger<Integer> exchanger = null;  int money = 0;public Employee(Exchanger<Integer> exchanger) {  super();  this.exchanger = exchanger;  }  @Override  public void run() {  for(int i=0;i<4;i++){try {money = exchanger.exchange(money,2,TimeUnit.SECONDS) ;System.out.println(money>300000?"您好,鉴于您为公司创收较多,将被评为优秀员工":money+"您好,鉴于您为公司创收较少,年终奖没有了");} catch (Exception e) {e.printStackTrace();}}}
}

执行结果

您好,鉴于您为公司创收较多,将被评为优秀员工

Exchanger特性

Exchanger主要用于二个线程之间交换数据,如果有一个线程没执行exchange()方法,则会一直等待,线程会一直阻塞;避免的方法,可以设置等待时间:exchange(V x, long timeout, TimeUnit unit)

完整代码和相关依赖请见GitHub

https://github.com/dwyanewede/project-learn/tree/master/src/main/java/com/learn/demo/concurrent

相关文章推荐

Java并发工具类(一)CountDownLatch https://blog.csdn.net/shang_xs/article/details/87075550
Java并发工具类(二)CyclicBarrier https://blog.csdn.net/shang_xs/article/details/87077098
Java并发工具类(四)Semaphore https://blog.csdn.net/shang_xs/article/details/87090443

Java并发工具类(三)Exchanger相关推荐

  1. Java并发工具类(4):Exchanger相关介绍

    Exchanger(交换者)是一个用于线程间协作的工具类.Exchanger用于进行线程间的数据交换.它提供一个同步点,在这个同步点两个线程可以交换彼此的数据.这两个线程通过exchange方法交换数 ...

  2. 彻底理解Java并发:Java并发工具类

    本篇内容包括:Java 并发工具类的介绍.使用方式与 Demo,包括了 CountDownLatch(线程计数器).CyclicBarrier(回环栅栏).Semaphore(信号量) 以及 Exch ...

  3. J.U.C之并发工具类:Exchanger

    本文来说下J.U.C之并发工具类:Exchanger 文章目录 概述 应用示例 实现分析 exchange()方法 本文小结 概述 前面分别介绍了CyclicBarrier.CountDownLatc ...

  4. Java并发工具类(闭锁CountDownLatch)

    并发工具类系列: Java并发工具类(闭锁CountDownLatch) Java并发工具类(栅栏CyclicBarrier) Java并发工具类(信号量Semaphore) 闭锁是一种同步工具类,可 ...

  5. 死磕Java并发:J.U.C之并发工具类:Exchanger

    作者:chenssy 来源:Java技术驿站 前面三篇博客分别介绍了CyclicBarrier.CountDownLatch.Semaphore,现在介绍并发工具类中的最后一个Exchange.Exc ...

  6. j.u.c系列(11)---之并发工具类:Exchanger

    写在前面 前面三篇博客分别介绍了CyclicBarrier.CountDownLatch.Semaphore,现在介绍并发工具类中的最后一个Exchange.Exchange是最简单的也是最复杂的,简 ...

  7. Java高并发编程(十):Java并发工具类

    1. 等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作. 1.1 应用场景 假如有这样一个需求:我们需要解析一个Excel里多个shee ...

  8. Java并发工具类:CountDownLatch、Semaphore、CyclicBarrier、Exchanger、Phaser

    本文目录: 1.CountDownLatch(闭锁) 1.CountDownLatch 例子 2.CyclicBarrier(循环栅栏) 1.CyclicBarrier 例子 2.CountDownL ...

  9. Java并发工具类-循环屏障CyclicBarrier

    CyclicBarrier简介 CyclicBarrier API 构造方法 await方法 reset方法 使用样例 CyclicBarrier源码详解 CyclicBarrier中属性 构造方法及 ...

最新文章

  1. 点击编辑的时候如何绑定DropDownList
  2. 250相当于什么显卡_2K(4K)144hz显示器需要什么显卡来带? 本文将给你答案。
  3. ACM公选第六节下DP基础(当复习了)2020.4.16-5.10补
  4. 23 | 二叉树基础(上):什么样的二叉树适合用数组来存储?
  5. Jmeter-基础篇
  6. covariance matrix r语言_时间序列分析|ARIMAX模型分步骤详解和R中实践
  7. 华为mate40搭载鸿蒙,华为mate40搭载鸿蒙还是EMUI11,答案来了
  8. php利用mkdir()创建多级目录
  9. 三维扫描3D打印在创客教育中的实际应用
  10. sap crm行业解决方案_培训机构行业crm系统解决方案
  11. 怀化市2021年高考查询成绩,2021怀化市地区高考成绩排名查询,怀化市高考各高中成绩喜报榜单...
  12. Python 扫雷游戏 完整源代码+图片素材
  13. 派件系统c语言实验报告,物流规划与优化选址实验报告.doc
  14. 绿色数据中心空调设计 书评_书评:响应式设计工作流程
  15. Unity3D手游开发实践
  16. mongodb用哪些端口号_mongodb端口号(mongodb默认端口号)
  17. python函数内嵌,嵌套函数
  18. 企业销售管理系统(数据库课程设计)
  19. NVIDIA PureVideo Decoder解码器注册码
  20. python正则获取豆瓣排行250

热门文章

  1. python导入上级目录_Python导入上一级/下一级/任一级目录下的.py文件问题
  2. 【MapReduce】MapReduce综合练习
  3. 泛癌种生物标志物介绍
  4. Hadoop(yarn)集群安装
  5. e470换高分屏_DIY之Thinkpad E470升级记
  6. 学习四旋翼(三):DMP姿态解算和串级PID控制姿态
  7. 渗透之——使用Metasploit实现对缓冲区栈的溢出攻击
  8. 同余定理在计算机科学的应用,同余定理在小学数学竞赛中的应用
  9. C语言的stdio.h文件
  10. 基于MATLAB的DTMF信号的仿真分析