【JAVA】java中Future、FutureTask的使用
2015-07-30 16:52
459 查看
现在的系统基本都是分布式的,各个系统各司其职的,不可能一个系统干了所有系统的事。
所以系统之间的交互就越来越多了,那么系统之间的交互只有通过网络来交互了,而网络必然会存在延时的情况。
比如A系统的一个功能要实现,其中某一步要去B系统拿一个全局唯一的ID值,那么此时在A系统的功能实现中就会发生对B系统的调用,如果是同步调用的话,可能会影响性能
String id = httpToB(url);
这样写的话,就是传统的同步方式,会一直等待B系统给出响应后才会继续往下执行;但是现实中,可能不是这样的,因为时间可能很长,所以先来一个线程去B系统拿这个ID值,当前线程,继续像后执行,当执行到某一步需要用到这个ID值了,再来取
这时候,就可以通过Future或者FutureTask来实现了,Future是接口,FutureTask是Future的一个具体实现类
可以看到了,等了4318049299这么多次,说明while循环了4318049299次才完成啊。
使用FutureTask的话,差不多,参照:http://blog.csdn.net/simonchi/article/details/8181571
所以系统之间的交互就越来越多了,那么系统之间的交互只有通过网络来交互了,而网络必然会存在延时的情况。
比如A系统的一个功能要实现,其中某一步要去B系统拿一个全局唯一的ID值,那么此时在A系统的功能实现中就会发生对B系统的调用,如果是同步调用的话,可能会影响性能
String id = httpToB(url);
这样写的话,就是传统的同步方式,会一直等待B系统给出响应后才会继续往下执行;但是现实中,可能不是这样的,因为时间可能很长,所以先来一个线程去B系统拿这个ID值,当前线程,继续像后执行,当执行到某一步需要用到这个ID值了,再来取
这时候,就可以通过Future或者FutureTask来实现了,Future是接口,FutureTask是Future的一个具体实现类
private static ThreadPoolExecutor poolExe = new ThreadPoolExecutor(100, 1000, 1, TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>(100)); private static Future<String> getUamKid() { return poolExe.submit(new Callable<String>() { public String call() throws Exception { // TODO Auto-generated method stub return sendHttpPostRequest("XXXXXXXXX", ""); } }); } public static void main(String a[]) throws Exception { Future<String> future = getUamKid(); System.out.println("去B系统取ID,现在我可以做自己的事情了"); System.out.println("ID拿到了吗?" + future.isDone()); long counter = 0; String uamKid = ""; while (!future.isDone()) { counter++; //System.out.println("我等,我等,我等等等..."); } uamKid = future.get(); System.out.println("ID = " + uamKid); System.out.println("进去等了多少次?" + counter); }
去B系统取ID,现在我可以做自己的事情了 ID拿到了吗?false ID = 38176732481585156 进去等了多少次?4318049299前面无数个等等等...
可以看到了,等了4318049299这么多次,说明while循环了4318049299次才完成啊。
使用FutureTask的话,差不多,参照:http://blog.csdn.net/simonchi/article/details/8181571
相关文章推荐
- The Genesis of Java Design Patterns
- ceph存储 Eclipse常用快捷键
- java连接Hbase数据报java.lang.NullPointerException空指针异常解决办法
- Java垃圾回收机制与引用类型
- JAVA JDBC
- spring中IOC是什么意思 个人觉得解释的非常有意思
- Java IO操作总结
- spring中IOC是什么意思 个人觉得解释的非常有意思
- spring中IOC是什么意思 个人觉得解释的非常有意思
- Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock
- Java异常处理宝典
- java写入文件的几种方法分享
- spring中IOC是什么意思 个人觉得解释的非常有意思
- [转载]java字符串模糊匹配(
- LeetCode147_Insertion Sort List(用插入排序算法对链表进行排序) Java题解
- 如何设置eclipse在默认模式下打开文件
- Java面向对象的基本特征
- java反射学习笔记-core java
- java成员内部类学习笔记
- spring中PropertyPlaceholderConfigurer的使用