public class ExchangerDemo {
public static void main(String args[]) {
Exchanger<String> exchanger = new Exchanger<>();
new Thread(()->{
System.out.println(Thread.currentThread().getName()+" start.....");
try {
String result = exchanger.exchange("A result");
System.out.println(Thread.currentThread().getName()+":"+result);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" end.....");
},"A").start();
new Thread(()->{
System.out.println(Thread.currentThread().getName()+" start.....");
try {
String result = exchanger.exchange("B result",10, TimeUnit.SECONDS);
System.out.println(Thread.currentThread().getName()+":"+result);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" end.....");
},"B").start();
A start.....
B start.....
B:A result
A:B result
A end.....
B end.....