java并发Exchanger的使用
文章目录
- 简介
- 类定义
- 类继承
- 构造函数
- 两个主要方法
- 具体的例子
- 结语
简介
Exchanger是java 5引入的并发类,Exchanger顾名思义就是用来做交换的。这里主要是两个线程之间交换持有的对象。当Exchanger在一个线程中调用exchange方法之后,会等待另外的线程调用同样的exchange方法。
两个线程都调用exchange方法之后,传入的参数就会交换。
类定义
public class Exchanger<V>
其中V表示需要交换的对象类型。
类继承
java.lang.Object
↳ java.util.concurrent.Exchanger<V>
Exchanger直接继承自Object。
构造函数
Exchanger()
Exchanger提供一个无参构造函数。
两个主要方法
- public V exchange(V x) throws InterruptedException
当这个方法被调用的时候,当前线程将会等待直到其他的线程调用同样的方法。当其他的线程调用exchange之后,当前线程将会继续执行。
在等待过程中,如果有其他的线程interrupt当前线程,则会抛出InterruptedException。
- public V exchange(V x, long timeout, TimeUnit unit) throws InterruptedException, TimeoutException
和第一个方法类似,区别是多了一个timeout时间。如果在timeout时间之内没有其他线程调用exchange方法,则会抛出TimeoutException。
具体的例子
我们先定义一个带交换的类:
@Data
public class CustBook {private String name;
}
然后定义两个Runnable,在run方法中调用exchange方法:
@Slf4j
public class ExchangerOne implements Runnable{Exchanger<CustBook> ex;ExchangerOne(Exchanger<CustBook> ex){this.ex=ex;}@Overridepublic void run() {CustBook custBook= new CustBook();custBook.setName("book one");try {CustBook exhangeCustBook=ex.exchange(custBook);log.info(exhangeCustBook.getName());} catch (InterruptedException e) {e.printStackTrace();}}
}
@Slf4j
public class ExchangerTwo implements Runnable{Exchanger<CustBook> ex;ExchangerTwo(Exchanger<CustBook> ex){this.ex=ex;}@Overridepublic void run() {CustBook custBook= new CustBook();custBook.setName("book two");try {CustBook exhangeCustBook=ex.exchange(custBook);log.info(exhangeCustBook.getName());} catch (InterruptedException e) {e.printStackTrace();}}
}
最后在主方法中调用:
public class ExchangerUsage {public static void main(String[] args) {Exchanger<CustBook> exchanger = new Exchanger<>();// Starting two threadsnew Thread(new ExchangerOne(exchanger)).start();new Thread(new ExchangerTwo(exchanger)).start();}
}
我们看下结果:
22:14:09.069 [Thread-1] INFO com.flydean.ExchangerTwo - book one
22:14:09.073 [Thread-0] INFO com.flydean.ExchangerOne - book two
可以看到对象已经被交换了。
结语
Exchanger在两个线程需要交换对象的时候非常好用。大家可以在实际工作生活中使用。
本文的例子https://github.com/ddean2009/learn-java-concurrency/tree/master/Exchanger
更多精彩内容且看:
- 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
- Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
- Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
- java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程
欢迎关注我的公众号:程序那些事,更多精彩等着您!
更多内容请访问 www.flydean.com
java并发Exchanger的使用相关推荐
- java并发实战编程pdf_「原创」Java并发编程系列25 | 交换器Exchanger
2020年Java面试题库连载中 [000期]Java最全面试题库思维导图 [001期]JavaSE面试题(一):面向对象 [002期]JavaSE面试题(二):基本数据类型与访问修饰符 [003期] ...
- exchange java对象,【原】Java并发程序的一个应用Exchanger的实例
[原]Java并发程序的一个使用Exchanger的实例 今天看了些Exchanger的资料,有个喝水的例子不错.我这里细化了以下,并得到实现. 思路: 有一个Drinker和一个Waiter,有两个 ...
- Java并发工具类(三)Exchanger
Java并发工具类(三)Exchanger 在J.U.C并发包中提供了一些工具类,可以供我们在日常的开发中,根据不同的情况去进行一些相关的并发控制,具体的类有: CountDownLatch Sema ...
- Java并发编程题库
文章目录 并发编程三要素? 实现可见性的方法有哪些? 创建线程的有哪些方式? 创建线程的三种方式的对比? Runnable 和 Callable 的区别 Java线程具有五中基本状态 什么是线程池?有 ...
- java 并发实例_java一些常用并发工具示例
最近把<java并发编程实战>-Java Consurrency in Practice 重温了一遍,把书中提到的一些常用工具记录于此: 一.闭锁(门栓)- CountDownLatch ...
- Java并发编程-并发工具包(java.util.concurrent)使用指南(全)
1. java.util.concurrent - Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.concurrent 包.这个包包含有一系列能够让 Ja ...
- 多线程面试题_100多线程和Java并发面试问答–最终清单(PDF下载)
多线程面试题 在这篇文章中,我们将提供有关多线程和Java并发面试问答的综合文章. 编者注:并发始终是开发人员的挑战,编写并发程序可能非常困难. 引入并发时,有很多事情可能会崩溃,并且系统的复杂性会大 ...
- 死磕Java并发:J.U.C之阻塞队列:ArrayBlockingQueue
作者:chenssy 来源:Java技术驿站 ArrayBlockingQueue,一个由数组实现的有界阻塞队列.该队列采用FIFO的原则对元素进行排序添加的. ArrayBlockingQueue为 ...
- Java并发编程-并发工具包java.util.concurrent使用指南
译序 本指南根据 Jakob Jenkov 最新博客翻译,请随时关注博客更新 本指南已做成中英文对照阅读版的 pdf 文档,有兴趣的朋友可以去 Java并发工具包java.util.concurren ...
最新文章
- C# 4.0 新特性之并行运算(Parallel)
- DFT实训教程笔记2(bibili版本)- Scan synthesis practice
- AOL、WebEx共同开发新AIM即时通讯
- matlab 高斯迭代代码_用Matlab编写你的第一个有限元_《数值计算与程序设计》系列课程...
- 一套存储承载全场景,XSKY星辰天合发布企业级SDS V5系列
- sqlite3用python家外键_Django/Sqlite3为带有外键的模型添加一行
- ssrs 级联参数_在SSRS中使用多值参数
- AmS中的一些重要调度相关变量
- 计算机网络基础系列(二)计算机网络体系结构
- linux用户个人的环境变量,linux下的变量以及系统和个人环境变量的配置文件
- jsencrypt php,js加密php解密(一)
- cmos sensor camera banding 现象发生原因及相关问题
- [渝粤教育] 华中科技大学 模拟电子技术基础 参考 资料
- [搞笑]后舍男生视频
- 【某集训题解】【DAY 2 T3】与非
- 计算机网络---广域网及相关协议
- 网站推广工具易推宝是什么?
- 正确理解UNICODE UTF-8等编码方式
- 有shsh/plist,不知道如何转shsh2?只需要4步
- 六元均匀直线阵的各元间距为_天线原理考试卷B.doc