work hard work smart

专注于Java后端开发。 不断总结,举一反三。
随笔 - 1158, 文章 - 0, 评论 - 153, 阅读 - 186万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

Exchanger

Posted on   work hard work smart  阅读(45)  评论(0编辑  收藏  举报

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 

 

相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2020-04-12 java子线程中获取父线程的threadLocal中的值
2020-04-12 String源码解析
点击右上角即可分享
微信分享提示