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万+

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



