1.简介
Exchange位于java.util.concurrent
包下面,主要是用于线程之间数据交换的工具类,经常用于管道设计和遗传算法中。Exchange提供了一个同步点,在这个同步点上,线程完成配对并进行数据的交换。第一个线程调用exchange()方法时传入对象,它会一直等待,直到第二个对象调用exchange()方法时,每个线程的exchange()方法将返回并且接收到匹配线程传入到exchange()方法中的对象,完成数据的交换。
可以将Exchange看做是一个双向数据传输的SynchronousQueue。
2.介绍
2.1构造方法
——public Exchange(){}
- 创建一个新的Exchange。
2.2 主要方法
——public V exchange(V x) throws InterruptedException{}
- 等待另外一个线程到达此交换点(除非当前线程被中断),将给定的对象x传送给该线程,并且接收该线程的对象。
——public V exchange(V x) throws InterruptedException{}
- 等待另外一个线程到达此交换点(除非当前线程被中断,或者超出了指定的等待时间),将指定的对象x传送给该线程,同时接收该线程的对象。
3.案例
创建固定线程池数量为2,两个线程以交换字符串数据为例,其中一个线程执行方法exchange()方法时,将等待,直到第二个线程执行exchange()方法,两个线程完成数据的交换。如果两个线程有一个没有执行exchange()方法,将会一直等待下去。
public class ExChangeDemo {
private static ExecutorService exec = Executors.newFixedThreadPool