一 点睛
当两个线程都运行都 exchanger.exchange(s),位置,然后开始交换变量,最后继续往下执行。
如果只有一个线程到达 exchanger.exchange(s) 位置,而另外一个线程没有到达,则等待另外一个线程到达。
就像两个人做生意,只有两个人都到达,并且发生一手交钱,一手交货,两个人才离开做各自的事情。
二 代码
import java.util.concurrent.Exchanger;
public class T12_TestExchanger {
// 交换器
static Exchanger<String> exchanger = new Exchanger<>();
public static void main(String[] args) {
new Thread(() -> {
String s = "T1";
try {
// 两个线程都达到这里,该线程要交换 T1,交换后 s 变成 T2
s = exchanger.exchange(s);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " " + s);
}, "t1").start();
new Thread(() -> {
String s = "T2";
try {
// 两个线程都达到这里,该线程要交换 T2,交换后 s 变成 T1
s = exchanger.exchange(s);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " " + s);
}, "t2").start();
}
}
三 测试
t1 T2
t2 T1