Java并发工具类(三)Exchanger
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相关推荐
- Java并发工具类(4):Exchanger相关介绍
Exchanger(交换者)是一个用于线程间协作的工具类.Exchanger用于进行线程间的数据交换.它提供一个同步点,在这个同步点两个线程可以交换彼此的数据.这两个线程通过exchange方法交换数 ...
- 彻底理解Java并发:Java并发工具类
本篇内容包括:Java 并发工具类的介绍.使用方式与 Demo,包括了 CountDownLatch(线程计数器).CyclicBarrier(回环栅栏).Semaphore(信号量) 以及 Exch ...
- J.U.C之并发工具类:Exchanger
本文来说下J.U.C之并发工具类:Exchanger 文章目录 概述 应用示例 实现分析 exchange()方法 本文小结 概述 前面分别介绍了CyclicBarrier.CountDownLatc ...
- Java并发工具类(闭锁CountDownLatch)
并发工具类系列: Java并发工具类(闭锁CountDownLatch) Java并发工具类(栅栏CyclicBarrier) Java并发工具类(信号量Semaphore) 闭锁是一种同步工具类,可 ...
- 死磕Java并发:J.U.C之并发工具类:Exchanger
作者:chenssy 来源:Java技术驿站 前面三篇博客分别介绍了CyclicBarrier.CountDownLatch.Semaphore,现在介绍并发工具类中的最后一个Exchange.Exc ...
- j.u.c系列(11)---之并发工具类:Exchanger
写在前面 前面三篇博客分别介绍了CyclicBarrier.CountDownLatch.Semaphore,现在介绍并发工具类中的最后一个Exchange.Exchange是最简单的也是最复杂的,简 ...
- Java高并发编程(十):Java并发工具类
1. 等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作. 1.1 应用场景 假如有这样一个需求:我们需要解析一个Excel里多个shee ...
- Java并发工具类:CountDownLatch、Semaphore、CyclicBarrier、Exchanger、Phaser
本文目录: 1.CountDownLatch(闭锁) 1.CountDownLatch 例子 2.CyclicBarrier(循环栅栏) 1.CyclicBarrier 例子 2.CountDownL ...
- Java并发工具类-循环屏障CyclicBarrier
CyclicBarrier简介 CyclicBarrier API 构造方法 await方法 reset方法 使用样例 CyclicBarrier源码详解 CyclicBarrier中属性 构造方法及 ...
最新文章
- 点击编辑的时候如何绑定DropDownList
- 250相当于什么显卡_2K(4K)144hz显示器需要什么显卡来带? 本文将给你答案。
- ACM公选第六节下DP基础(当复习了)2020.4.16-5.10补
- 23 | 二叉树基础(上):什么样的二叉树适合用数组来存储?
- Jmeter-基础篇
- covariance matrix r语言_时间序列分析|ARIMAX模型分步骤详解和R中实践
- 华为mate40搭载鸿蒙,华为mate40搭载鸿蒙还是EMUI11,答案来了
- php利用mkdir()创建多级目录
- 三维扫描3D打印在创客教育中的实际应用
- sap crm行业解决方案_培训机构行业crm系统解决方案
- 怀化市2021年高考查询成绩,2021怀化市地区高考成绩排名查询,怀化市高考各高中成绩喜报榜单...
- Python 扫雷游戏 完整源代码+图片素材
- 派件系统c语言实验报告,物流规划与优化选址实验报告.doc
- 绿色数据中心空调设计 书评_书评:响应式设计工作流程
- Unity3D手游开发实践
- mongodb用哪些端口号_mongodb端口号(mongodb默认端口号)
- python函数内嵌,嵌套函数
- 企业销售管理系统(数据库课程设计)
- NVIDIA PureVideo Decoder解码器注册码
- python正则获取豆瓣排行250