Guava之ListenableFuture(实现Java异步)
来源:互联网 发布:mysql 查询死锁语句 编辑:程序博客网 时间:2024/04/30 02:47
*还记得我之前转载的一篇文章吗?
http://blog.csdn.net/u011499747/article/details/50725131
但是这个实现的异步不是不能实现复杂的链式回调。*
0.回顾jdk自带的future
实验代码:
package com.dubby.guava.future;import java.util.concurrent.*;/** * Created by dubby on 16/3/28. */public class JDKFuture { public static void main(String[] args) throws Exception{ ExecutorService pool = Executors.newFixedThreadPool(3); Future<String> future = pool.submit(new Callable<String>() { public String call() throws Exception { try { Thread.sleep(1000); } catch (Exception e){ e.printStackTrace(); } return "JDK Normal future result"; } }); String result = future.get(); System.out.println(result); pool.shutdown(); }}
get方法会堵塞,如果要用到这个结果,还是需要堵塞当前线程。
1.guava的ListenableFuture
实验代码:
package com.dubby.guava.future;import com.google.common.util.concurrent.*;import java.util.concurrent.Callable;import java.util.concurrent.CountDownLatch;import java.util.concurrent.Executors;/** * Created by dubby on 16/3/28. */public class ListenerFutureDemo { public static void main(String[] args) { final CountDownLatch latch = new CountDownLatch(1); ListeningExecutorService pool = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(3)); ListenableFuture<String> listenableFuture = pool.submit(new Callable<String>() { public String call() throws Exception { try{ Thread.sleep(1000); } catch (Exception e){ e.printStackTrace(); } return "Guava Listening future result"; } }); Futures.addCallback(listenableFuture, new FutureCallback<String>() { public void onSuccess(String s) { latch.countDown(); System.out.println(s); } public void onFailure(Throwable throwable) { System.out.println(throwable.getMessage()); } }); try { latch.await(); } catch (InterruptedException e) { e.printStackTrace(); } pool.shutdown(); }}
2.代码解释
2.1 装饰者模式获得ListeningExecutorService。
2.2 ListenableFuture listenableFuture = pool.submit()获得ListenableFuture。
2.3 Futures.addCallback()设置回调函数。
1 0
- Guava之ListenableFuture(实现Java异步)
- 从Java future 到 Guava ListenableFuture实现异步调用
- Guava ListenableFuture实现异步非阻塞调用
- Guava之ListenableFuture(链式回调)
- 多线程Future之Guava ListenableFuture
- guava ListenableFuture
- guava ListenableFuture
- Java Future & Guava ListenableFuture关系图
- ListenableFuture异步多线程代码实现
- ListenableFuture in Guava
- guava ListenableFuture使用
- ListenableFuture in Guava
- Google Guava ListenableFuture入门
- Guava 中的 ListenableFuture
- Guava ListenableFuture 小试牛刀
- ListenableFuture in Guava
- guava中的ListenableFuture
- ListenableFuture in Guava
- 搜索框简易处理方式
- Oracle ERP 的前世今生
- [Android Studio] Gradle项目中添加JNI生成文件(.so文件)
- 断舍离
- 数学分析笔记-菲赫金哥尔茨-第一卷-绪论
- Guava之ListenableFuture(实现Java异步)
- 接口开发注意事项阶段性总结
- Windows server 2008 R2远程桌面终端连接数的破解
- Java FileOutputStream中向文本文件中写入换行符
- Windows 7中C:/Users/用户名/AppData里面的文件概述
- 回溯法~相关内容
- 【C/C++语言入门篇】-- 位运算
- Object对象转换成json
- Linux网络流量监控