Exchanger(交换者),它是用于线程间的协作工具类,主要用于线程间数据的交换。它提供了一个同步点,在这个同步点,两个线程可以交换彼此的数据。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | public class ExchangerTest { private static final Exchanger<String> exchanger = new Exchanger<>(); private static ExecutorService threadPool = Executors.newFixedThreadPool( 2 ); public static void main(String[] args) { threadPool.execute( new Runnable() { @Override public void run() { String a = "aaaaaaaaaa" ; try { String b = exchanger.exchange(a); System.out.println( "---" + b); } catch (InterruptedException e) { e.printStackTrace(); } } }); threadPool.execute( new Runnable() { @Override public void run() { try { String b = "bbbbbbbb" ; String a = exchanger.exchange( "bababa" ); System.out.println( "a is " + a + " , b is " + b); } catch (InterruptedException e) { e.printStackTrace(); } } }); threadPool.shutdown(); } } |
输出如下:
1 2 | a is aaaaaaaaaa , b is bbbbbbbb ---bababa |
注意点
1、Exchanger只能作用于两个线程之间,如果作用于第三个线程,则第三个线程一直处于等待中;
2、exchange中还有一个重载函数,接收一个等待时长,用于避免一直等待。
参考: https://blog.csdn.net/qq_27828675/article/details/114068266
作者:Work Hard Work Smart
出处:http://www.cnblogs.com/linlf03/
欢迎任何形式的转载,未经作者同意,请保留此段声明!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2020-04-12 java子线程中获取父线程的threadLocal中的值
2020-04-12 String源码解析