Exchanger線程交換數據

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

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章