Java并发编程之Exchanger方法详解

2025-05-29 0 46

简介

Exchanger是一个用于线程间数据交换的工具类,它提供一个公共点,在这个公共点,两个线程可以交换彼此的数据。

当一个线程调用exchange方法后将进入等待状态,直到另外一个线程调用exchange方法,双方完成数据交换后继续执行。

Exchanger的使用

方法介绍

exchange(V x):阻塞当前线程,直到另外一个线程调用exchange方法或者当前线程被中断。

  1. x : 需要交换的对象。

exchange(V x, long timeout, TimeUnit unit):阻塞当前线程,直到另外一个线程调用exchange方法或者当前线程被中断或者等待超时。

  • x: 需要交换的对象。
  • timeout:超时时间。
  • unit:超时时间单位。

exchange方法正常情况返回交换到的对象,当当前线程被中断或者等待超时时,exchange方法返回null。

示例1:A同学和B同学交换各自收藏的大片

?

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
public class Demo {

public static void main(String[] args) {

Exchanger<String> stringExchanger = new Exchanger<>();

Thread studentA = new Thread(() -> {

try {

String dataA = "A同学收藏多年的大片";

String dataB = stringExchanger.exchange(dataA);

System.out.println("A同学得到了" + dataB);

} catch (InterruptedException e) {

e.printStackTrace();

}

});

Thread studentB = new Thread(() -> {

try {

String dataB = "B同学收藏多年的大片";

String dataA = stringExchanger.exchange(dataB);

System.out.println("B同学得到了" + dataA);

} catch (InterruptedException e) {

e.printStackTrace();

}

});

studentA.start();

studentB.start();

}

}

/*

* 输出结果:

* B同学得到了A同学收藏多年的大片

* A同学得到了B同学收藏多年的大片

*/

示例2:A同学被放鸽子,交易失败

?

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
public class Demo {

public static void main(String[] args) {

Exchanger<String> stringExchanger = new Exchanger<>();

Thread studentA = new Thread(() -> {

String dataB = null;

try {

String dataA = "A同学收藏多年的大片";

//最多等待5秒

dataB = stringExchanger.exchange(dataA, 5, TimeUnit.SECONDS);

} catch (InterruptedException e) {

e.printStackTrace();

} catch (TimeoutException ex){

System.out.println("等待超时-TimeoutException");

}

System.out.println("A同学得到了" + dataB);

});

studentA.start();

}

}

/*

* 输出结果:

* 等待超时-TimeoutException

* A同学得到了null

*/

到此这篇关于Java并发编程Exchanger方法详解的文章就介绍到这了,更多相关Java并发编程Exchanger内容请搜索快网idc以前的文章或继续浏览下面的相关文章希望大家以后多多支持快网idc!

原文链接:https://www.cnblogs.com/seve/archive/2021/04/11/14640642.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java并发编程之Exchanger方法详解 https://www.kuaiidc.com/108048.html

相关文章

发表评论
暂无评论