Java并发工具Exchanger线程间交换数据
本文目录
- Exchanger简介
- Exchanger使用介绍
Exchanger简介
Exchanger是一个用于线程间协作的工具类。Exchanger用于进行线程间的数据交 换。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过 exchange
方法交换数据,如果第一个线程先执行exchange()
方法,它会一直等待第二个线程也 执行exchange()
方法,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产 出来的数据传递给对方
Exchanger使用介绍
Exchanger<T>
用于在两个线程之间共享数据。该类仅提供一个重载方法exchange(T t)
,其中exchange(V x, long timeout, TimeUnit unit)
方法可以指定阻塞超时时间,下面通过一个来理解两个线程之间交换数据:
public class ExchangerDemo {static Exchanger<String> exgr = new Exchanger<>();public static void main(String[] args) {Thread taskA=new Thread(()->{try {String message = exgr.exchange("from A");System.out.println("A Task===>"+ message);} catch (InterruptedException e) {e.printStackTrace();}});Thread taskB=new Thread(()->{try {String message = exgr.exchange("from B");System.out.println("B Task===>"+ message);} catch (InterruptedException e) {e.printStackTrace();}});taskA.start();taskB.start();}
}
输出结果:
线程A,把数据传给了线程B,线程B,把数据传给了线程A
B Task===>from A
A Task===>from B
子线程与主线程间交换数据:
public class ExchangerDemo2 {static Exchanger<String> exchanger = new Exchanger<>();public static void main(String[] args) throws InterruptedException {Runnable childTask = () -> {try {String message = exchanger.exchange("来自子线程的数据");System.out.println("子线程: "+message);} catch (InterruptedException e) {Thread.currentThread().interrupt();throw new RuntimeException(e);}};//CompletableFuture java1.8中新增的异步编程类CompletableFuture<Void> result = CompletableFuture.runAsync(childTask);String msg = exchanger.exchange(" 来自主线程的数据");System.out.println("主线程: " +msg);result.join();}
}
输出结果:
子线程: 来自主线程的数据
主线程: 来自子线程的数据
Java并发工具Exchanger线程间交换数据相关推荐
- Java并发编程--6.Exchanger线程间交换数据
在两个线程之间定义同步点,当两个线程都到达同步点时,他们交换数据结构,因此第一个线程的数据结构进入到第二个线程中,第二个线程的数据结构进入到第一个线程中 在生产者-消费者情境模式中它包含了一个数缓冲区 ...
- 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...
- Java多线程研究(八)使用Exchange在多个线程间交换数据
比如生活中两个人,一个人有零食,另一个人有钱,他们两个想等价交换,对好口号在某个地方相见,一个人先到了之后,必须等另一个人带着需要的东西来了之后,才能开始hi交换. 代码: import java.u ...
- java面试-Java并发编程(六)——线程间的通信
多条线程之间有时需要数据交互,下面介绍五种线程间数据交互的方式,他们的使用场景各有不同. 1. volatile.synchronized关键字 PS:关于volatile的详细介绍请移步至:Java ...
- Java高并发编程(十):Java并发工具类
1. 等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作. 1.1 应用场景 假如有这样一个需求:我们需要解析一个Excel里多个shee ...
- 线程同步工具(七)在并发任务间交换数据
声明:本文是< Java 7 Concurrency Cookbook >的第三章, 作者: Javier Fernández González 译者:郑玉婷 在并发任务间交换数据 Jav ...
- 【java】Java 中的 Exchanger 线程同步使用方法 线程之间交换数据
1.概述 转载:https://www.pdai.tech/md/java/thread/java-thread-x-juc-tool-exchanger.html 视频参考:https://www. ...
- java 多线程共享变量两类问题_Java并发基础09. 多个线程间共享数据问题
先看一个多线程间共享数据的问题: 设计四个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1. 从问题来看,很明显涉及到了线程间通数据的共享,四个线程共享一个 data,共同操作 ...
- java 多个线程共享数据_【java并发】多个线程间共享数据
先看1个多线程间同享数据的问题: 设计4个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1. 从问题来看,很明显触及到了线程间通数据的同享,4个线程同享1个data,共同操作1 ...
最新文章
- 面试题:请用代码实现ip地址与int之间互换?
- 关于line-height的一些理解
- **52.常用的存储保护方法有哪些?
- [Android]Space控件的应用场景
- LoRaWAN开放式实验平台
- Android基础——数据存储
- 微博热榜排行榜zset
- 【NOIP-2017PJ】图书管理员
- 页面自适应纯CSS,使用rem单位
- 设计模式 (七) 适配器模式
- Visual Studio安装及无法打开包括文件: “crtdbg.h”问题解决
- 微信小程序连接蓝牙汉印HM-A300L标签打印机
- 【Linux集群教程】11 集群监控 - Zabbix 搭建
- 什么是TF-IDF?
- ⚓写写5G网速及页面提速中的延迟加载Lazyloading
- 法兰克机器人外部自动_(完整版)KUKA机器人外部自动配置方法
- STM32——SDIO简介
- Cordova 环境搭建+打包Android APK
- Python接口下载文件
- ps web格式 html 大小写,PS教程:图片存储为Web所用格式优化详解
热门文章
- Mesh组网之单线复用与VLAN网口复用
- 电脑怎么直接给服务器传文件夹,教你电脑怎么传文件夹给qq好友
- 0xC0000005: 读取位置 0x00000001 时发生访问冲突
- dmp标签_[重磅推荐]你必须知道的京准通DMP知识!
- Oracle导入dmp数据
- HTTP中200、302、304、404和500等响应状态码含义
- 基于Python回归模型的异方差性分析
- 如何使用cleanmymac文件粉碎机
- java为什么有基本类型_你了解Java数据类型吗?
- 主机升级rsyslog后服务异常分析,rsyslog服务重启报错