用來交換兩個線程的數據。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(); } }
運行結果以下:
首先,會通過三秒後,才輸出結果,說明兩個線程沒交換以前是阻塞的。輸出結果能夠看出,兩個線程的字符串交換了。spa