由SimpleAyncTaskExecutor到ListenableFutureTask

Posted 凌渡冰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由SimpleAyncTaskExecutor到ListenableFutureTask相关的知识,希望对你有一定的参考价值。

Spring AsyncExecutor观后感

导语

本来想看下spring关于Async&Sync TaskExecutor的主要内容,看着看着发现ListenableTaskExecutor也很有意思,FutureTask也很有意思,最后发现,这个代码设计真的很有意思啊

SimpleAsyncTaskExecutor

结构图

理解SimpleAsyncTaskExecutor,先来看看它的类图和继承关系吧

在这里想要说的是:每次用户提交新的任务给SimpleAsyncTaskExecutor时,它都会启动新的线程来响应客户请求,并在处理完客户请求后自动销毁它,这就是说,它并没有提供线程池的功能,如下图

 

如果想要实现线程池的功能,可以自行实现 CustomizableThreadCreator 来获得需要的功能;这还不是重点,重点是发现了它的 监听Future的API,顿时想要找到原理:

ListenableFutureTask

每个listenableFutureTask既是一个任务又是一个Future,关键在于它聚合了一个策略:ListenableFutureCallbackRegistry

 

listenableFutureTask通过重写FutureTask的done方法,去回调ListenableFutureCallbackRegistry的onSuccess或者onFailure方法,进行回调

 

FutureTask

futureTask 模板了 done 方法,留给继承者去实现,很灵活,其中JDK源代码中 ExecutorCompletionService 中便聚合了QueueingFuture:

 

ExecutorCompletionService可以异步处理不需要有顺序的任务,最终从一个队列中获取任务执行结果。

实现思路流程图

个人觉得上边的那个图和图中的注释说的很清楚啦。

以上是关于由SimpleAyncTaskExecutor到ListenableFutureTask的主要内容,如果未能解决你的问题,请参考以下文章

[BZOJ4540][HNOI2016]序列

区间动态规划

Ceph集群由Jewel版本升级到Luminous版本

bzoj2687

2.理解文法和语文

C#:Release-Build-DL​​L 中的 Debug.Assert() 似乎由 Debug-Build-Project 激活