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(); } }
相关文章推荐
- 安装完win10后Eclipse好看多了
- java课堂练习,反射
- 20145230《Java程序设计》第3周学习总结
- eclipse反编译插件安装
- JAVA多线程之(CyclicBarrier)
- myeclipse2014如何创建user library
- java设计模式基础之设计原则
- Leetcode:278. First Bad Version(JAVA)
- Java学习之InputStream中read()与read(byte[] b)
- myeclipse的buildpath 和lib引入的区别
- [分拣思想]——对象计数
- 20145236 冯佳 《Java程序设计》第3周学习总结
- Java自动装箱和拆箱定义
- struts2中的constant配置
- 关于 Java 中 正则表达式的 MULTILINE 标志
- Spark读取Hbase中的数据
- JAVA多线程之(CountDownLatch)
- JS基本类型与Java的区别复习
- Leetcode: 125. Valid Palindrome(JAVA)
- Eclipse调试常用技巧