public class Exchanger<V>
extends Object
可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象。Exchanger 可能被视为 SynchronousQueue 的双向形式。Exchanger 可能在应用程序(比如遗传算法和管道设计)中很有用。
以上是jdk文档的说明。
* 今天公司党委组织活动、12点半call我电话、我以80码的速度狂奔过去、上了一个车子(A车)、
* 戴着眼镜四处瞄了下,没发现什么美女啊。假寐了一会儿,司机说另外一个车子(B车)上要换过来
* 一个人、让车子上的人下去一个去B车。由于地势原因、我就下去了。
*
* 一路上突然想到了java线程并发库中的Exchanger类。A车我们可以看作是一个线程、B车我们也可以
* 看作是一个线程,我和B车上的一位美女换位子,就可以用到Exchanger类的exchange方法。
*
* 代码如下:
public class ExchangerTest {
public static void main(String[] args) {
final Exchanger<String> exchange=new Exchanger<String>();
//final String a="yupan";
//final String b="a girl";
final String[] carA=new String[]{"zhangsan","lisi","yupan"};
final String[] carB=new String[]{"meinv_a","meinv_b","meinv_c"};
//A车线程
new Thread(new Runnable(){
String[] carA_copy=carA;
@Override
public void run() {
try {
System.out.println("交换前:A车上的第三位乘客:"+carA[2]);
carA_copy[2]=exchange.exchange(carA_copy[2]);
System.out.println("交换后:A车上的第三位乘客:"+carA[2]);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
//B车线程
new Thread(new Runnable(){
String[] carB_copy=carB;
@Override
public void run() {
try {
System.out.println("交换前:B车上的第三位乘客:"+carB[2]);
carB_copy[2]=exchange.exchange(carB_copy[2]);
System.out.println("交换后:B车上的第三位乘客:"+carB[2]);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
输出结果:
交换前:A车上的第三位乘客:yupan
交换前:B车上的第三位乘客:meinv_c
交换后:B车上的第三位乘客:yupan
交换后:A车上的第三位乘客:meinv_c
http://blog.sina.com.cn/s/blog_7f448c5201012183.html