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
本文介绍了一个使用Java并发库中的Exchanger类实现线程间数据交换的例子。通过创建三个线程并利用Exchanger对象进行数据交换,展示了如何在多线程环境中同步地交换数据。
2万+

被折叠的 条评论
为什么被折叠?



