比如生活中两个人,一个人有零食,另一个人有钱,他们两个想等价交换,对好口号在某个地方相见,一个人先到了之后,必须等另一个人带着需要的东西来了之后,才能开始hi交换。

代码:

import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class ExchangeTest {public static void main(String[] args) {ExecutorService service =Executors.newCachedThreadPool();final Exchanger exchanger = new Exchanger();service.execute(new Runnable() {@Overridepublic 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){e.printStackTrace();}}});service.execute(new Runnable() {@Overridepublic 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){e.printStackTrace();}}});}
}

控制台输出:

线程pool-1-thread-1正在把数据 零食 换出去
线程pool-1-thread-2正在把数据 钱 交换出去
线程 pool-1-thread-1换回的数据为 钱
线程 pool-1-thread-2交换回来的数据是: 零食

Java多线程研究(八)使用Exchange在多个线程间交换数据相关推荐

  1. Java并发工具Exchanger线程间交换数据

    本文目录 Exchanger简介 Exchanger使用介绍 Exchanger简介 Exchanger是一个用于线程间协作的工具类.Exchanger用于进行线程间的数据交 换.它提供一个同步点,在 ...

  2. Java并发编程--6.Exchanger线程间交换数据

    在两个线程之间定义同步点,当两个线程都到达同步点时,他们交换数据结构,因此第一个线程的数据结构进入到第二个线程中,第二个线程的数据结构进入到第一个线程中 在生产者-消费者情境模式中它包含了一个数缓冲区 ...

  3. Java多线程笔记(零):进程、线程与通用概念

    前言 不积跬步,无以至千里:不积小流,无以成江海.在学习Java多线程相关的知识前,我们首先需要去了解一点操作系统的进程.线程以及相关的基础概念. 进程 通常,我们把一个程序的执行称为一个进程.反过来 ...

  4. Java 多线程(八) 线程状态图

    Java 多线程(八) 线程状态图 结合多线程的学习过程,介绍线程的状态图,随着学习的深入,这幅图不断加入新的内容. 一.线程基本状态图 这幅图是在Java 多线程(三) 线程的生命周期及优先级出现过 ...

  5. java 多线程共享变量两类问题_Java并发基础09. 多个线程间共享数据问题

    先看一个多线程间共享数据的问题: 设计四个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1. 从问题来看,很明显涉及到了线程间通数据的共享,四个线程共享一个 data,共同操作 ...

  6. 【java】Java 中的 Exchanger 线程同步使用方法 线程之间交换数据

    1.概述 转载:https://www.pdai.tech/md/java/thread/java-thread-x-juc-tool-exchanger.html 视频参考:https://www. ...

  7. java 多个线程共享数据_【java并发】多个线程间共享数据

    先看1个多线程间同享数据的问题: 设计4个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1. 从问题来看,很明显触及到了线程间通数据的同享,4个线程同享1个data,共同操作1 ...

  8. Java多线程(八)之Semaphore、CountDownLatch、CyclicBarrier、Exchanger

    一.引言 Semaphore               :一个计数信号量 CountDownLatch          :一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线 ...

  9. Java多线程系列(八):ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)

    HashMap.CurrentHashMap 的实现原理基本都是BAT面试必考内容,阿里P8架构师谈:深入探讨HashMap的底层结构.原理.扩容机制深入谈过hashmap的实现原理以及在JDK 1. ...

最新文章

  1. 中key的用途_Micro Focus Operations Bridge Manager中的多个(RCE)漏洞
  2. SecutrCRTt 连接VirtualBox 中的Ubuntu -端口转发
  3. NAS+CNN+Transformer=ViT-Res!MIT团队重磅开源ViT-Res,精度高于DeiT-Ti8.6%
  4. java page 分页_自己整理写的java分页工具条pageUtil
  5. win7计算机地址栏在那,win7系统如何使用地址栏功能|win7系统使用地址栏的方法...
  6. 深山红叶PE工具箱嫦娥一号纪念版
  7. 德银病危:心比天高,却落下黄粱一梦
  8. McAfee企业版8.8——病毒库的备份与还原
  9. 大学计算机作业互评评语简短,学生作业互评表的填写方法
  10. 23.24复合求积公式
  11. Wi-Fi6移动热点功能配置
  12. 微信小程序的购物车功能
  13. 【RocketMQ】从零搭建一套RocketMQ监控(rocketmq-exporter + Prometheus + Grafana)
  14. Docker学习笔记 (4)
  15. 如何获取sha1值和MD5值
  16. windows 8 新登陆方式(图片密码、Pin码)
  17. 贪心算法题目 电池的寿命
  18. 当你在浏览器上,指尖轻轻输入 www.taobao.com 以后发生了什么?
  19. 【ICO/WMF】PNG/JPEG转ICO/WMF工具
  20. wifi路由器中的WPS功能

热门文章

  1. css 判断 移动设备 横屏 或 竖屏
  2. django abstract base class ---- 抽象基类
  3. 进程间通信(五)—信号
  4. UVA 12299 RMQ with Shifts 线段树
  5. Left join ,Right join ,inner join 的运行结果的区别
  6. redis 之 ae 模型测试
  7. 大脑遗忘与数据结构中的对列相似
  8. vlc学习计划(2)---二进制包安装及使用
  9. H3C 路由器的IPSEC ××× 配置
  10. 使用IDE宏遍历代码中的非ASCII字符