Java 线程数据交换控制器Exchange使用实例
2019独角兽企业重金招聘Python工程师标准>>>
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<String> changer = new Exchanger<String>();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()+"交易完毕,撤!");}}});}
}
执行结果:
转载于:https://my.oschina.net/u/2391658/blog/710451
Java 线程数据交换控制器Exchange使用实例相关推荐
- 【Java】数据交换
[Java]数据交换 需求 已知两个整数变量a = 10,b = 20,使用程序实现这两个变量的数据交换 最终输出a = 20,b = 10 代码 package com.cxl.demo28; // ...
- 基于Java的数据交换整合平台V2.0更新了
数据交换ETL及可视化平台 平台定位 本平台是一个基于web的异构数据交换和数据可视化展示工具,支持常见的关系型数据库(MySQL,Oralce,SqlServer,PostgreSQL),适用于中小 ...
- 基于java的数据交换ETL工具及可视化平台源码
平台定位 本平台是一个基于web的异构数据交换和数据可视化展示工具,支持常见的关系型数据库(MySQL,Oralce,SqlServer,PostgreSQL),适用于中小型企事业单位的内部信息化系统 ...
- java线程安全问题之静态变量、实例变量、局部变量
转载 java多线程编程中,存在很多线程安全问题,至于什么是线程安全呢,给出一个通俗易懂的概念还是蛮难的,如同<java并发编程实践>中所说: 写道 给线程安全下定义比较困难.存在很多种定 ...
- java 线程安全问题之静态变量、实例变量、局部变量
2019独角兽企业重金招聘Python工程师标准>>> java多线程编程中,存在很多线程安全问题,至于什么是线程安全呢,给出一个通俗易懂的概念还是蛮难的,如同<java并发编 ...
- Java线程池ThreadPoolExecutor参数讲解、实例助记 保证你过目不忘
ThreadPoolExecutor构造器的参数说明 参数一:指定线程池的核心线程数量(核心线程,长久不死亡): corePoolSize 不能小于0 参数二:指定线程池可支持的最大线程数: maxi ...
- Java多线程研究(八)使用Exchange在多个线程间交换数据
比如生活中两个人,一个人有零食,另一个人有钱,他们两个想等价交换,对好口号在某个地方相见,一个人先到了之后,必须等另一个人带着需要的东西来了之后,才能开始hi交换. 代码: import java.u ...
- 【java】Java 中的 Exchanger 线程同步使用方法 线程之间交换数据
1.概述 转载:https://www.pdai.tech/md/java/thread/java-thread-x-juc-tool-exchanger.html 视频参考:https://www. ...
- Java并发编程--6.Exchanger线程间交换数据
在两个线程之间定义同步点,当两个线程都到达同步点时,他们交换数据结构,因此第一个线程的数据结构进入到第二个线程中,第二个线程的数据结构进入到第一个线程中 在生产者-消费者情境模式中它包含了一个数缓冲区 ...
最新文章
- Linkify介绍 编辑textview超链接
- python测试用例图_pytest以函数形式的测试用例
- 去雾综述_【综述】图像去雾的前世今生
- 腾讯地图api如何根据地址获取经纬度
- html基础知识点列表
- Ehcache BigMemory: 摆脱GC困扰(转)
- product thumbnail区域未能显示的原因分析
- [剑指offer]面试题22:栈的压入、弹出序列
- linux nfsnobody用户,处理CentOS 5.5 x64 配置NFS服务过程中nfsnobody用户造成的问题
- 64 装饰器函数: 母版 csrf防御机制 cookie
- SAP License:ERP系统供应商管理都包含什么?
- 使用阿里云容器服务Jenkins 2.0实现持续集成之the tag you want篇(updated on 2017.09.06)...
- 【渝粤教育】广东开放大学 普通话训练 形成性考核 (48)
- 计算机模拟 matlab,MATLAB计算机模拟实例课件.ppt
- C++ 虚函数实现:虚函数表 虚表指针
- 湖南科技大学c语言上机题库,2018年湖南科技大学计算机科学与工程院824C语言程序设计与数据结构综合之C程序设计考研核心题库...
- sudo: /etc/sudoers is world writable sudo: no valid sudoers sources found, quitting sudo: 解决方法
- 编译原理:代码生成(pcode),C语言实现
- 金蝶K3 ACTIVEX部件不能创建对象 金蝶K3一直装载进不去
- 推荐一款高颜值第三方网易云客户端: YesPlayMusic