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