Java多线程与并发库高级应用之线程数据交换Exchanger

本文介绍 Java 平台 JDK1.5 中 Exchanger 类的使用方法,通过示例展示如何利用 Exchanger 实现两个线程之间的数据交换。

JDK1.5提供了Exchanger用于两个线程的数据交换。两个线程先后到达交换点,先到达的线程会等待后到达的线程,然后两个线程互相交换数据,交换后双方持对方的数据。

 

Exchanger只提供了一个构造器:

Exchanger():创建一个新的Exchanger。

 

Exchanger中也只有两个方法:

V exchange(V x): 等待另一个线程到达此交换点(除非当前线程被中断),然后将给定的对象传送给该线程,并接收该线程的对象。

V exchange(V x, long timeout, TimeUnit unit): 等待另一个线程到达此交换点(除非当前线程被中断,或者超出了指定的等待时间),然后将给定的对象传送给该线程,同时接收该线程的对象。

 

见下面程序

public class ExchangerDemo {

	public static void main(String[] args) {
		
		//线程池
		ExecutorService pool = Executors.newCachedThreadPool();
		//Exchanger
		final Exchanger<String> changer = new Exchanger<String>();
		
		//用于交互数据的线程1
		pool.execute(new Runnable() {
			
			@Override
			public void run() {
				try{
					String data1 = "苹果";
					System.out.println(Thread.currentThread().getName() +
							"-准备交换数据:" + data1);
					Thread.sleep((long)(Math.random()*10000));
					String data2 = (String)changer.exchange(data1);
					System.out.println(Thread.currentThread().getName() +
							"-已交换完数据,交换到的数据:" + data1);
				}catch(InterruptedException e){
					e.printStackTrace();
				}
			}
		});
		
		//用于交互数据的线程2
		pool.execute(new Runnable() {
			
			@Override
			public void run() {
				try{
					String data1 = "石榴";
					System.out.println(Thread.currentThread().getName() +
							"-准备交换数据:" + data1);
					Thread.sleep((long)(Math.random()*10000));
					String data2 = (String)changer.exchange(data1);
					System.out.println(Thread.currentThread().getName() +
							"-已交换完数据,交换到的数据:" + data1);
				}catch(InterruptedException e){
					e.printStackTrace();
				}
			}
		});
		
		pool.shutdown();
	}
}


运行程序

看到两个线程将数据彼此交换。

 

 

【项目名称】:运用C++编程语言开发的视觉图像三维重构系统 【目标用户】:面向有意涉足跨技术领域学习的入门者及资深开发者。适合用作毕业设计课题、教学实践任务、大型作业、工业实训或初级科研项目启动。 【系统概述】: 本系统通过视觉图像数据实现三维物体的几何建模,其核心模块涵盖以下功能: - **基础架构**:集成工程所需的基础数据组织形式,涵盖影像资料、深度图谱、网格模型、视角参数等元素的存储交互机制。 - **数学运算库**:包含矩阵操作、矢量计算、四元数变换等数学工具,支撑几何计算需求。 - **特征处理单元**:支持SIFTSURF两类特征识别算法的提取匹配操作。 - **运动结构复原模块**:实现摄像机位姿推算、三维空间点三角定位及光束法平差等关键技术。 - **多视角立体模块**:通过立体匹配算法生成高密度点云数据。 - **表面重建组件**:将离散点云转化为连续网格曲面。 - **纹理映射单元**:生成贴合模型表面的纹理贴图。 - **应用案例库**:提供典型应用场景的代码示范。 - **缓存目录**:用于暂存运算过程产生的临时文件。 系统以模块化架构确保各功能单元独立可拓展,适用于计算机视觉图形学领域的算法研究及工程实践。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值