java併發編程 - 雞肋工具 -- Exchanger線程數據交換器

前言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

image.png

相關文章
相關標籤/搜索