通过exchange方法交换,当两个线程都执行该方法时完成交换,其中一个先执行会等待另一个。
public class ExchangerTest {
//交换者
private static Exchanger<String> exchanger=new Exchanger<>();
//固定2个大小的线程池
private static ExecutorService pool=Executors.newFixedThreadPool(2);
public static void main(String[] args) {
pool.execute(new Runnable() {
@Override
public void run() {
String A="wA";
try {
String exchange = exchanger.exchange(A);
System.out.println("now A's w:"+exchange);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
pool.execute(new Runnable() {
@Override
public void run() {
String B="wB";
try {
String exchange = exchanger.exchange(B);
System.out.println("now B's w:"+exchange);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
pool.shutdown();
}
}