当前位置: 首页 > 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.jsqmd.com/news/40307/

相关文章:

  • 2025 最新净化工程厂家推荐排行榜 实验室 / 手术室 / 医药 / 食品 / 厂房洁净工程优质服务商医药/食品净化工程/净化车间工程公司推荐
  • 通配符优化 dp 学习笔记
  • 2025年尖角方管实力厂家权威推荐榜单:玻璃幕墙精致钢/直角方矩管/精制钢源头厂家精选
  • 20232308 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • TurboWarp 部署云变量服务
  • Java 信号量机制实现
  • lc:338练习的一点思考
  • 京东商品评论接口深度逆向:从加密参数破解到情感倾向分析
  • [LangChian] 18. 自动维护聊天记录
  • 二进制掩码规律
  • jenkins构建生成docker镜像
  • 在线文档大全
  • AI大事记12:Transformer 架构——重塑 NLP 的革命性技能(下)
  • 记一次多线程插入或者更新数据库表操作优化过程
  • 2025年进口干冰机代理工厂权威推荐榜单:干冰清洗机/干冰制造机源头厂家精选
  • 接口调试利器,Postman免安装,免登陆 - 详解
  • 微算法科技(NASDAQ MLGO)在委托权益证明DPoS主链上引入PoW轻节点验证,提升抗量子攻击能力
  • 字的bi-gram可能是个馊主意
  • 常见的几种硬盘接口类型
  • 2025年w70钨铜棒制造企业权威推荐榜单:钨铜导电块/钨铜块/93钨合金源头厂家精选
  • 嵌入式系统profinet转devicenet固件与硬件接口的连接案例
  • KMPlayer下载教程(2025新版)——全功能安装配置与使用经验详解
  • 一个通过强制使用符号来避免链接器忽略符号的方法
  • 安卓非原创--基于Android Studio 实现的天气预报App - 教程
  • 10.7万条轨迹+4大机器人构型!RoboMIND开源数据集破解机器人通用操作难题 | 附一键复现指南
  • 2025年全屋定制橱柜优质厂家权威推荐榜单:全屋定制门窗/高端整装定制/整装全屋定制源头厂家精选
  • c++初学者的随笔记录_4
  • 2025 最新多孔筋增强管生产线厂家权威推荐:国际测评认证 + 技术创新双驱,全周期服务优选榜单缠绕管承插口生产线 / 承插口注塑设备生产线公司推荐
  • 自动化控制Devicenet转Profinet—PLC分布式控制架构的网关连接案例
  • 2025年专业的卷被机工厂权威推荐榜单:好的卷被机/不错的卷被机/卷被机品牌厂家精选