您的位置:首页 > 编程语言 > Java开发

java学习——使用Exchanger实现两个线程间的数据交换

2011-11-23 11:35 951 查看
package com.hujl.thread;

import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 线程之间互换数据
* @author Janrone
* @website http://hujl.sinaapp.com */
public class ExchangerDemo {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ExecutorService service=Executors.newCachedThreadPool();
//线程之间交换数据
final Exchanger<String> exchanger=new Exchanger<String>();

service.execute(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
String data1="data1";
System.out
.println("线程"+Thread.currentThread().getName()+"正在把数据交换出去"+data1);
try {
Thread.sleep((long)(Math.random()*10000));
String data2=exchanger.exchange(data1);
System.out
.println("线程"+Thread.currentThread().getName()+"换回来的数据"+data2);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});

service.execute(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
String data1="data2";
System.out
.println("线程"+Thread.currentThread().getName()+"正在把数据交换出去"+data1);
try {
Thread.sleep((long)(Math.random()*10000));
String data2=exchanger.exchange(data1);
System.out
.println("线程"+Thread.currentThread().getName()+"换回来的数据"+data2);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});

service.shutdown();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: