我们通常把Exchanger称为"交换器",它提供了线程之间交换对象的同步点。"交换器"Exchanger提供了exchange方法来完成线程之间对象的交换,线程会向exchange方法传递对象同时接收其它线程的返回对象。
Exchanger位于java.util.concurrent包下,我们可以通过一个无参的构造器完成它的对象创建。Exchanger提供了两个方法来完成对象的交换,分别是:1.exchange(V x)方法会在交换点上等待其它线程到达,同时将对象传递进去,之后接收其他线程的对象作为其返回。2.exchange(V x,long timeout,TimeUnit unit)方法与前一个方法功能是一样的,唯一的区别是增加了等待时间上的限制。为了演示"交换器"的使用,我们看一个实例:
例子中创建了两个线程对象,一个是Apple对象,另一个是Orange对象。Apple对象把"apple"字符串传递到交换器中,得到了"orange"字符串的返回,并把它打印了出来。Orange对象把"orange"字符串传递到交换器中,得到了"apple"字符串的返回,并把它打印了出来。在Testing类中创建了交换器对象,并把这个交换器传递到两个线程对象中,启动线程分别输出结果。交换器通常应用在诸如管道设计的程序中,在遗传算法上也有广泛的应用。