这期内容当中小编将会给大家带来有关Exchanger方法怎么在Java中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
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<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同学被放鸽子,交易失败
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
*/
上述就是小编为大家分享的Exchanger方法怎么在Java中使用了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注天达云行业资讯频道。