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();
}
}