Exchanger (交换者) 是一个用于线程间协作的工具类。
Exchanger 用于进行线程间的数据交换。
两个线程通过 exchange()
方法交换数据,第一个线程执行到 exchange()
方法后会一直等待第二个线程也执行 exchange()
方法,当两个线程都到达同步点后,这两个线程就可以交换数据。测试代码如下:
public class TestExchanger {
private static final Exchanger<String> exchanger = new Exchanger();
public static void main(String[] args) {
new Thread(() -> {
String s = "t1";
try {
s = exchanger.exchange(s);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " " + s);
}, "T1").start();
new Thread(() -> {
String s = "t2";
try {
s = exchanger.exchange(s);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " " + s);
}, "T2").start();
}
}
控制台输出如下:
T2 t1
T1 t2