<pre name="code" class="java">package com.jerry.concurrency;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Exchanger;
import java.util.concurrent.Executors;
public class TestExchanger {
public static void main(String[] args) {
ExecutorService thread =Executors.newCachedThreadPool();
final Exchanger<String> exchanger = new Exchanger<String>();//存储进行交换的对象
for(int i=0;i<=1;i++){//启动交换数据的两个线程
thread.submit(new Runnable(){
@Override
public void run() {
try {
String data1 = "《《《线程" + Thread.currentThread().getName() + "的数据》》》";
System.out.println("线程" + Thread.currentThread().getName() + "正在把数据" + data1 + "交给另外一个线程");
Thread.sleep((new Random().nextInt(20)));
String data2 = (String) exchanger.exchange(data1);
System.out.println("线程" + Thread.currentThread().getName() + "换回的数据为" + data2);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
});
}
thread.shutdown();
}
}
</pre>