当前位置: 首页 > news >正文

Java Exchanger

Java Exchanger

Exchanger 是 JDK 1.5 起提供的并发工具类,主要用于两个工作线程之间交换数据,兼具特定的同步特性与应用场景。

核心特性

  • 对外操作是同步的,确保线程间数据交换的有序性。
  • 专门用于成对出现的线程之间交换数据,不支持多线程同时交叉交换。
  • 可看作双向的同步队列,线程需等待伙伴线程到达交换点才能完成操作。
  • 适用场景包括基因算法、流水线设计等需要线程间数据交互的场景。

核心接口

Exchanger 类的接口设计简洁,包含一个无参构造函数和两个重载的泛型 exchange 方法:

  1. public V exchange(V x) throws InterruptedException:无超时时间的交换方法,线程会一直等待伙伴线程,直至交换完成或被中断。
  2. public V exchange(V x, long timeout, TimeUnit unit) throws InterruptedException, TimeoutException:带超时时间的交换方法,若超过指定时间伙伴线程仍未到达,会抛出超时异常。

接口工作原理

当一个线程调用 exchange 方法时,会根据伙伴线程的状态执行不同逻辑:

  • 若伙伴线程已提前调用 exchange 方法,当前线程会唤醒伙伴线程,两者完成数据交换后各自返回对方的数据。
  • 若伙伴线程未到达交换点,当前线程会被挂起,直至满足以下条件之一:
    1. 伙伴线程到达交换点,完成数据交换后正常返回;
    2. 当前线程被其他线程中断,抛出 InterruptedException;
    3. 等待时间超过设定超时阈值(仅带超时参数的方法),抛出 TimeoutException。

实现代码示例

示例 1:基础数据交换

package com.exchanger;import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;/*** @author Jing61*/
public class ExchangerTest {public static void main(String[] args) {ExecutorService service = Executors.newCachedThreadPool();final Exchanger exchanger = new Exchanger();service.execute(new Runnable() {public void run() {try {String data1 = "白粉";System.out.println("线程" + Thread.currentThread().getName() +"正在把数据" + data1 + "换出去");Thread.sleep((long) (Math.random() * 10000));String data2 = (String) exchanger.exchange(data1);System.out.println("线程" + Thread.currentThread().getName() +"换回的数据为" + data2);} catch (Exception e) {}}});service.execute(new Runnable() {public void run() {try {String data1 = "美金";System.out.println("线程" + Thread.currentThread().getName() +"正在把数据" + data1 + "换出去");Thread.sleep((long) (Math.random() * 10000));String data2 = (String) exchanger.exchange(data1);System.out.println("线程" + Thread.currentThread().getName() +"换回的数据为" + data2);} catch (Exception e) {}}});}
}

示例 2:NBA 球员交易模拟

package com.exchanger;import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.*;/*** @author Jing61*/
public class ExchangerDemo {public static void main(String[] args) {var executor = Executors.newCachedThreadPool();final Exchanger exchanger = new Exchanger();executor.execute(new Runnable() {String data1 = "克拉克森,小拉里南斯";@Overridepublic void run() {nbaTrade(data1, exchanger);}});executor.execute(new Runnable() {String data1 = "格里芬";@Overridepublic void run() {nbaTrade(data1, exchanger);}});executor.execute(new Runnable() {String data1 = "史蒂芬.裤裆里";@Overridepublic void run() {nbaTrade(data1, exchanger);}});executor.shutdown();}private static void nbaTrade(String data1, Exchanger exchanger) {try {System.out.println(Thread.currentThread().getName() + "在交易截止之前把 " + data1 + " 交易出去");Thread.sleep((long) (Math.random() * 1000));String data2 = (String) exchanger.exchange(data1);System.out.println(Thread.currentThread().getName() + "交易得到" + data2);} catch (InterruptedException e) {e.printStackTrace();}}
}
http://www.zskr.cn/news/49551.html

相关文章:

  • [LangChain] 17. Memory基础
  • 20232308 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 还在求Sora2邀请码?我已经用Sora2 API批量生成无水印视频了!(附免费去水印+Api调用教程)
  • [LangChian] 18. 自动维护聊天记录
  • 二进制掩码规律
  • 记一次多线程插入或者更新数据库表操作优化过程
  • 2025年进口干冰机代理工厂权威推荐榜单:干冰清洗机/干冰制造机源头厂家精选
  • 接口调试利器,Postman免安装,免登陆 - 详解
  • 2025年w70钨铜棒制造企业权威推荐榜单:钨铜导电块/钨铜块/93钨合金源头厂家精选
  • 嵌入式系统profinet转devicenet固件与硬件接口的连接案例
  • 一个通过强制使用符号来避免链接器忽略符号的方法
  • c++初学者的随笔记录_4
  • 自动化控制Devicenet转Profinet—PLC分布式控制架构的网关连接案例
  • 2025年专业的卷被机工厂权威推荐榜单:好的卷被机/不错的卷被机/卷被机品牌厂家精选
  • 2025 年 11 月 Pogopin 弹簧针厂家推荐排行榜,精密测试针,医疗传感器,手机连接器,声学弹簧,触摸仪表,手表锁具,座椅检测优质公司推荐
  • 国标GB28181算法算力平台EasyGBS如何赋能现代应急指挥体系?
  • xcode 打包 报错 main.jsbundle does not exist.
  • OpenObserve日志分析平台
  • 鸿蒙应用开发之ArkUI框架基础布局(二)
  • JS的数组操作
  • 开启pg_trgm扩展
  • AntV X6 实现鼠标右键框选 - cola
  • 网络安全主动防御技术与应用 - 指南
  • IDEA开发过程中Module的Compiler Output和Artifact的关系
  • IDEA开发过程中Artifact和Maven有什么区别
  • 样式,草稿
  • 6、表联结 JOIN
  • 易基因:郑州大学第一附属医院孙同文教授团队利用表观多组学揭示二甲双胍通过DNA甲基化和羟甲基化双向调控减轻肝损伤的保护机制|项目文章
  • kettle 从excel中读取需要同步的表到另一个数据库中
  • 2025 年 11 月断桥铝窗/门/系统窗/门窗/窗户厂家推荐排行榜,专业定制与节能性能口碑之选