一.介绍
Exchanger(交换者),是用于线程间协作的工具类,Exchanger用于进行线程间的数据交换,它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据,这两个线程通过exchange方法交换数据,如果第一个线程先执行exchange方法,它会一直等待第二个线程也执行exchange方法,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。
二.使用
public class ExchangerTest {
public static Exchanger<String> exchanger = new Exchanger<>();
public static void main(String[] args) {
new Thread(()->{
try {
exchanger.exchange("1");
System.out.println(Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
},"t1").start();
new Thread(()->{
try {
TimeUnit.SECONDS.sleep(1);
System.out.println(exchanger.exchange("2"));
} catch (InterruptedException e) {
e.printStackTrace();
}
},"t2").start();
}
}
结果:
// 延时1s 打印出1,可以看出t1线程在exchange方法处hang住了,
//直到t2调用了exchange方法才继续往下运行
1
t1