通過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();
}
}