- 交换器,两人之间交换数据用的
- 线程之间通信的方式有很多种,这只是其中一种
- 背后有一点CyclicBarrier的概念
- 两个线程都调用了Exchanger的exchange方法,并且这个方法是阻塞的
- 一个线程先执行会将值扔到中间的交换器上,然后阻塞
- 第二个线程也是同样
- 然后两个值互相交换,之后两个线程继续向前跑
- 三个线程只能自己同步,不存在三个线程直接交换的类或方法
- 一个线程调用了exchange,而另一个线程没有调用exchange,那么之前那个线程就会阻塞(等着,什么时候有第二个来了,调用了exchange方法就继续向下)
- 只能两个交换,三个交换要指定交换规则(两两交换?)
- 最常用的就是缓冲这一块
- 原理是AQS吗?**原理不是AQS,是用LockSupport来实现的???**

package com.mashibing.juc.c_020;import java.util.concurrent.Exchanger;public class T12_TestExchanger { static Exchanger<String> exchanger = new Exchanger<>(); public static void main(String[] args) { new Thread(()->{ String s = "T1"; try { s = exchanger.exchange(s); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " " + s); }, "t1").start(); new Thread(()->{ String s = "T2"; try { s = exchanger.exchange(s); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " " + s); }, "t2").start(); }}