Java并发工具之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线程间交换数据详解的文章就介绍到这了,更多相关Exchanger线程间交换数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring使用RestTemplate模拟form提交示例
本篇文章主要介绍了Spring使用RestTemplate模拟form提交示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-03-03
java中的FileInputStream三种read()函数用法
这篇文章主要介绍了java中的FileInputStream三种read()函数用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-12-12
基于Java实现ssh命令登录主机执行shell命令过程解析
这篇文章主要介绍了基于Java实现ssh命令登录主机执行shell命令过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2019-12-12


最新评论