Exchanger类用于两个线程之间的信息交换。
举一个现场的例子:
import java.util.concurrent.Exchanger;
public class ExchangerTest {
static Exchanger<String> exchanger = new Exchanger<>();
public static void main(String[] args) {
new Thread(()->{
String s = "thread-1";
try {
s = exchanger.exchange(s);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" "+s);
},"t1").start();
new Thread(()->{
String s = "thread-2";
try {
s = exchanger.exchange(s);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" "+s);
},"t2").start();
}
}
输出结果:
t1 thread-2
t2 thread-1
如果屏蔽上面一个线程,是不会执行完毕的,必须等待下一个exchanger线程的到来,才会结束。