zoukankan      html  css  js  c++  java
  • 由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可以异步处理不需要有顺序的任务,最终从一个队列中获取任务执行结果。

    实现思路流程图

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

  • 相关阅读:
    小程序双重for循环实现tab切换小demo
    小程序基础操作小总结
    一道关于类型转换的面试题的研究
    面试准备(6)vue专题
    面试准备(5)一道关于循环,事件执行顺序的题进行剖析
    微信小程序弹出授权用户信息和手机号
    面试准备(4) 作用域 预解析 字面量 arguments 等考察点练习
    ABC135
    CodeForces 1288C
    P4170
  • 原文地址:https://www.cnblogs.com/zhangxiaoguang/p/5252584.html
Copyright © 2011-2022 走看看