博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 线程数据交换控制器Exchange使用实例
阅读量:6987 次
发布时间:2019-06-27

本文共 1633 字,大约阅读时间需要 5 分钟。

hot3.png

Exchanger可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据。

当线程A调用Exchange对象的exchange()方法后,他会陷入阻塞状态,直到线程B也调用了exchange()方法,然后以线程安全的方式交换数据,之后线程A和B继续运行。

今天决定花几分钟时间写个小例子看下效果。以下实例演示了使用Exchange交换String数据,实际Exchange还可以交换对对象,比如交换List,HashMap,自定义的Model等。

源码如下:

package demo19;import java.util.concurrent.Exchanger;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * 使用Exchanger模拟买北京老冰棍的场景 * @author mengfeiyang * */public class ExchangeTest {	public static void main(String[] args) {		ExecutorService  service = Executors.newCachedThreadPool();		Exchanger
changer = new Exchanger
(); service.submit(new Runnable(){ public void run(){ try{ String data1 = "北京老冰棍"; System.out.println("线程 "+Thread.currentThread().getName()+" 正在把 "+data1+" 拿出来"); String data2 = changer.exchange(data1); System.out.println("线程 "+Thread.currentThread().getName()+"用 "+data1+" 换来了"+data2); }catch(Exception e){ e.printStackTrace(); }finally{ service.shutdown(); System.out.println(Thread.currentThread().getName()+"交易完毕,撤!"); } } }); service.submit(new Runnable(){ public void run(){ try{ String data1 = "100元"; System.out.println("线程 "+Thread.currentThread().getName()+" 正在把钱 "+data1+" 拿出来"); String data2 = changer.exchange(data1); System.out.println("线程 "+Thread.currentThread().getName()+"用 "+data1+"换来了"+data2); }catch(Exception e){ e.printStackTrace(); }finally{ service.shutdown(); System.out.println(Thread.currentThread().getName()+"交易完毕,撤!"); } } }); }}

执行结果:

162825_p2ca_2391658.png

转载于:https://my.oschina.net/u/2391658/blog/710451

你可能感兴趣的文章
20160408javaweb之JDBC ---PreparedStatement
查看>>
2018.11.03-dtoj-2092-交通 (traffic)
查看>>
内置模块(二)
查看>>
【HNOI2016】树
查看>>
Java Web整合开发(附录1) - 安装配置环境
查看>>
javascript对象创建
查看>>
linux解压war包的命令
查看>>
MyQThread new
查看>>
js的继承
查看>>
SOCKET用法详解
查看>>
struts2中的OGNL详解
查看>>
C++的虚函数
查看>>
C++11的新特性:右值引用
查看>>
memcache和redis的区别
查看>>
NodeJS、NPM安装配置步骤(windows版本)
查看>>
spring xml配置文件根元素(文件头文件)说明
查看>>
windows ssh RPi 2B
查看>>
Git常用命令
查看>>
异常,File,递归,IO流
查看>>
百度地图、ECharts整合HT for Web网络拓扑图应用
查看>>