前言java
做爲java併發編程的工具之一的Exchanger交換器只支持2個線程之間的數據互換。當線程A須要在內部同線程B交換各自的數據時,調用exchange()後,會自動阻塞等待對方線程數據到達,而後進行交換。它內部採用CAS機制實現數據之間的互換功能。
編程
簡單驗證用法併發
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 { /*添加數據*/ setA.add("a"); setA.add("b"); setA.add("c"); Set<String> setB = exchange.exchange(setA);//交換set /*處理交換後的數據*/ System.out.println("打印setA和setB交換後的數據:"); for (String s : setB){ System.out.println(s); } System.out.println("=============換來了setB================"); } catch (InterruptedException e) { } } }).start(); new Thread(new Runnable() { @Override public void run() { Set<String> setB = new HashSet<String>();//存放數據的容器 try { /*添加數據 */ setB.add("d"); setB.add("e"); setB.add("f"); Set<String> setA = exchange.exchange(setB);//交換set /*處理交換後的數據*/ System.out.println("打印setB和setA交換後的數據:"); for (String s : setA){ System.out.println(s); } System.out.println("=============換來了setA================"); } catch (InterruptedException e) { } } }).start(); } }
輸出結果ide