两个线程可以交换对象的同步点。每个线程都在进入 exchange 方法时给出某个对象,并接受其他线程返回时给出的对象。
public class Test {
public static void main(String[] args) {
final Exchanger<String> exch = new Exchanger<String>();
ExecutorService exec = Executors.newCachedThreadPool();
exec.execute(new Runnable(){
@Override
public void run() {
String s1 = "S1中国";
try {
s1 = exch.exchange(s1);
System.out.println("s1#"+s1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}}
);
exec.execute(new Runnable(){
@Override
public void run() {
String s2 = "S2外国";
try {
s2 = exch.exchange(s2);
System.out.println("s2#"+s2);
} catch (InterruptedException e) {
e.printStackTrace();
}
}}
);
}
/**
* 输出结果:
* s1#S2外国
* s2#S1中国
*/
}