Java并发编程之Exchanger方法详解

网友投稿 256 2023-01-23

Java并发编程之Exchanger方法详解

简介

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

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

Exchanger的使用

方法介绍

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

x : 需要交换的对象。

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

x: 需要交换的对象。

timeout:超时时间。

unit:超时时间单位。

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

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

public class Demo {

public static void main(String[] args) {

Exchanger 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同学被放鸽子,交易失败

public class Demo {

public static void main(String[] args) {

Exchanger 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.prihttp://ntStackTrace();

} catch (TimeoutException ex){

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

}

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

});

studentA.start();

}

}

/*

* 输出结果:

* 等待超时-TimeoutException

* A同学得到了null

*/

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:接口测试开放api接口(api接口测试用例)
下一篇:免费API借口(免费无限制的api接口)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~