Java多线程研究(八)使用Exchange在多个线程间交换数据
比如生活中两个人,一个人有零食,另一个人有钱,他们两个想等价交换,对好口号在某个地方相见,一个人先到了之后,必须等另一个人带着需要的东西来了之后,才能开始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在多个线程间交换数据相关推荐
- Java并发工具Exchanger线程间交换数据
本文目录 Exchanger简介 Exchanger使用介绍 Exchanger简介 Exchanger是一个用于线程间协作的工具类.Exchanger用于进行线程间的数据交 换.它提供一个同步点,在 ...
- Java并发编程--6.Exchanger线程间交换数据
在两个线程之间定义同步点,当两个线程都到达同步点时,他们交换数据结构,因此第一个线程的数据结构进入到第二个线程中,第二个线程的数据结构进入到第一个线程中 在生产者-消费者情境模式中它包含了一个数缓冲区 ...
- Java多线程笔记(零):进程、线程与通用概念
前言 不积跬步,无以至千里:不积小流,无以成江海.在学习Java多线程相关的知识前,我们首先需要去了解一点操作系统的进程.线程以及相关的基础概念. 进程 通常,我们把一个程序的执行称为一个进程.反过来 ...
- Java 多线程(八) 线程状态图
Java 多线程(八) 线程状态图 结合多线程的学习过程,介绍线程的状态图,随着学习的深入,这幅图不断加入新的内容. 一.线程基本状态图 这幅图是在Java 多线程(三) 线程的生命周期及优先级出现过 ...
- java 多线程共享变量两类问题_Java并发基础09. 多个线程间共享数据问题
先看一个多线程间共享数据的问题: 设计四个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1. 从问题来看,很明显涉及到了线程间通数据的共享,四个线程共享一个 data,共同操作 ...
- 【java】Java 中的 Exchanger 线程同步使用方法 线程之间交换数据
1.概述 转载:https://www.pdai.tech/md/java/thread/java-thread-x-juc-tool-exchanger.html 视频参考:https://www. ...
- java 多个线程共享数据_【java并发】多个线程间共享数据
先看1个多线程间同享数据的问题: 设计4个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1. 从问题来看,很明显触及到了线程间通数据的同享,4个线程同享1个data,共同操作1 ...
- Java多线程(八)之Semaphore、CountDownLatch、CyclicBarrier、Exchanger
一.引言 Semaphore :一个计数信号量 CountDownLatch :一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线 ...
- Java多线程系列(八):ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)
HashMap.CurrentHashMap 的实现原理基本都是BAT面试必考内容,阿里P8架构师谈:深入探讨HashMap的底层结构.原理.扩容机制深入谈过hashmap的实现原理以及在JDK 1. ...
最新文章
- 中key的用途_Micro Focus Operations Bridge Manager中的多个(RCE)漏洞
- SecutrCRTt 连接VirtualBox 中的Ubuntu -端口转发
- NAS+CNN+Transformer=ViT-Res!MIT团队重磅开源ViT-Res,精度高于DeiT-Ti8.6%
- java page 分页_自己整理写的java分页工具条pageUtil
- win7计算机地址栏在那,win7系统如何使用地址栏功能|win7系统使用地址栏的方法...
- 深山红叶PE工具箱嫦娥一号纪念版
- 德银病危:心比天高,却落下黄粱一梦
- McAfee企业版8.8——病毒库的备份与还原
- 大学计算机作业互评评语简短,学生作业互评表的填写方法
- 23.24复合求积公式
- Wi-Fi6移动热点功能配置
- 微信小程序的购物车功能
- 【RocketMQ】从零搭建一套RocketMQ监控(rocketmq-exporter + Prometheus + Grafana)
- Docker学习笔记 (4)
- 如何获取sha1值和MD5值
- windows 8 新登陆方式(图片密码、Pin码)
- 贪心算法题目 电池的寿命
- 当你在浏览器上,指尖轻轻输入 www.taobao.com 以后发生了什么?
- 【ICO/WMF】PNG/JPEG转ICO/WMF工具
- wifi路由器中的WPS功能