guava 并发
2016-04-27 00:00
190 查看
概念
ListenableFuture顾名思义就是可以监听的Future,它是对java原生Future的扩展增强。我们知道Future表示一个异步计算任务,当任务完成时可以得到计算结果。如果我们希望一旦计算完成就拿到结果展示给用户或者做另外的计算,就必须使用另一个线程不断的查询计算状态。这样做,代码复杂,而且效率低下。使用ListenableFuture Guava帮我们检测Future是否完成了,如果完成就自动调用回调函数,这样可以减少并发程序的复杂度。代码:
import com.google.common.util.concurrent.*; import java.util.concurrent.*; /** * Created by admin on 2016/4/27. */ public class ExcutorEngineTest { public static void main(String[] args) throws Exception { ListeningExecutorService executorService = MoreExecutors .listeningDecorator(MoreExecutors .getExitingExecutorService(new ThreadPoolExecutor(10, 100, 3000, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()))); ListenableFuture<Integer> future = executorService.submit(new Task("test")); System.out.println("future:" + future.get()); Futures.addCallback(future, new FutureCallback<Integer>() { @Override public void onSuccess(Integer result) { System.out.println("result" + result); } @Override public void onFailure(Throwable t) { System.err.println("error"); } }); } static class Task implements Callable<Integer>{ String str; public Task(String str){ this.str = str; } @Override public Integer call() throws Exception { System.out.println("call excute...." + str); return 8; } } }
--------------------
执行结果:
call excute....test
future:8
result8
相关文章推荐
- Guava学习笔记:EventBus
- python 解析unicode编码的字符串
- PHP 学习笔记 - - - 简单方法的使用 (数组)
- find_if
- 这些ABBYY FineReader中的小技巧你了解不?
- 怎么实现iMindMap中的插入功能的快速运用
- Head First C 第十二章 线程 平行世界
- SpringMvc与Struts2的对比,孰优孰劣
- zookeeper学习笔记-基本用法进阶
- Unity 换装
- 数据库中的锁
- Nginx+Tomcat实现动静分离
- 基于Java技术的大型网站架构方案(转)
- nginx整合tomcat
- 在网页上添加分享到朋友圈、发送给好友、分享等按钮
- CentOS 6.X 安装python3.X
- 数据类型的自动转换
- ajax对注册用户名的实时验证和登陆验证
- 超链接的两种写法
- JTA分布式事务实践