快速理解:一個線程在執行exchange(set)之後,會等待另一個線程執行exchange(set),然後兩個線程繼續往下執行
圖解
示例代碼:交換數據
public class UseExchange {
private static final Exchanger<Set<String>> exchange = new Exchanger<Set<String>>();
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
Set<String> setA = new HashSet<String>();//存放數據的容器
try {
Thread.currentThread().setName("setA:");
System.out.println("setA原來是:a,b,c,d");
//添加數據
setA.add("a");
setA.add("b");
setA.add("c");
setA.add("d");
Thread.sleep(1000);
setA = exchange.exchange(setA);//交換set
System.out.println("交換之後" + Thread.currentThread().getName() + setA.toString());
/*處理交換後的數據*/
} catch (InterruptedException e) {
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
Set<String> setB = new HashSet<String>();//存放數據的容器
Thread.currentThread().setName("setB:");
System.out.println("setB原來是:1,2,3,4");
try {
//添加數據
setB.add("1");
setB.add("2");
setB.add("3");
setB.add("4");
setB = exchange.exchange(setB);//交換set
System.out.println("交換之後" + Thread.currentThread().getName() + setB.toString());
/*處理交換後的數據*/
} catch (InterruptedException e) {
}
}
}).start();
}
}
執行結果:
setA原來是:a,b,c,d
setB原來是:1,2,3,4
交換之後setA:[1, 2, 3, 4]
交換之後setB:[a, b, c, d]