import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Exchange 2个线程之间交换数据
*/
public class ExchangeTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ExecutorService service=Executors.newCachedThreadPool();
final Exchanger exchanger=new Exchanger();
service.execute(new Runnable(){
@Override
public void run() {
try {
String data1="zxx";
System.out.println("线程"+Thread.currentThread().getName()+"正在把数据"+data1+"换出去");
Thread.sleep((long)Math.random()*10000);
String data2=(String)exchanger.exchange(data1);
System.out.println("线程"+Thread.currentThread().getName()+"换回的数据为"+data2);
} catch (Exception e) {
// TODO: handle exception
}
}
});
service.execute(new Runnable(){
@Override
public void run() {
try {
String data1="lhm";
System.out.println("线程"+Thread.currentThread().getName()+"正在把数据"+data1+"换出去");
Thread.sleep((long)Math.random()*10000);
String data2=(String)exchanger.exchange(data1);
System.out.println("线程"+Thread.currentThread().getName()+"换回的数据为"+data2);
} catch (Exception e) {
// TODO: handle exception
}
}
});
service.execute(new Runnable(){
@Override
public void run() {
try {
String data1="happy";
System.out.println("线程"+Thread.currentThread().getName()+"正在把数据"+data1+"换出去");
Thread.sleep((long)Math.random()*10000);
String data2=(String)exchanger.exchange(data1);
System.out.println("线程"+Thread.currentThread().getName()+"换回的数据为"+data2);
} catch (Exception e) {
// TODO: handle exception
}
}
});
}
}
结果:
线程pool-1-thread-1正在把数据zxx换出去
线程pool-1-thread-2正在把数据lhm换出去
线程pool-1-thread-3正在把数据happy换出去
线程pool-1-thread-3换回的数据为zxx
线程pool-1-thread-1换回的数据为happy