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

java多线程之(Exchanger)

2016-03-20 16:14 447 查看
Exchanger是自jdk1.5起开始提供的工具套件,一般用于两个工作线程之间交换数据。具体场景如下:

此类提供对外的操作是同步的;
用于成对出现的线程之间交换数据;
可以视作双向的同步队列;
可应用于基因算法、流水线设计等场景。

package nc.com.thread.other;

import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
* 线程间数据交换
* @ClassName: ExchangerTest
* @Description: TODO(这里用一句话描述这个类的作用)
* @author A18ccms a18ccms_gmail_com
* @date 2016-3-20 下午04:15:19
*
*/
public class ExchangerTest {

public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
final Exchanger<String> changer = new Exchanger<String>();
for(int i=0;i<2;i++){
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("线程"+Thread.currentThread().getName()+"将要发出数据");
try {
Thread.sleep(10000);
String value = Thread.currentThread().getName()+" data "+Thread.currentThread().getId();
System.out.println("线程"+Thread.currentThread().getName()+"发出数据"+value);
String result=changer.exchange(value);
System.out.println("线程"+Thread.currentThread().getName()+"交换回数据"+result);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
service.submit(r);
}
service.shutdown();
}

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