java併發編程學習之Exchanger

做用

用來交換兩個線程的數據。ide

示例

public class ExchangerDemo {
    static Exchanger<String> exchanger = new Exchanger<>();

    static class Thread1 extends Thread {
        @Override
        public void run() {
            try {
                sleep(3000);
                String str = exchanger.exchange("a");
                System.out.println(Thread.currentThread().getName() + "-" + str);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    static class Thread2 extends Thread {
        @Override
        public void run() {
            try {
                String str = exchanger.exchange("b");
                System.out.println(Thread.currentThread().getName() + "-" + str);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        Thread1 thread1 = new Thread1();
        Thread2 thread2 = new Thread2();
        thread1.start();
        thread2.start();
    }
}

運行結果以下:
clipboard.png
首先,會通過三秒後,才輸出結果,說明兩個線程沒交換以前是阻塞的。輸出結果能夠看出,兩個線程的字符串交換了。spa

相關文章
相關標籤/搜索