【问题标题】:spring mvc: the difference between DeferredResult and ListenableFuture?spring mvc:DeferredResult 和 ListenableFuture 的区别?
【发布时间】:2021-08-01 15:06:41
【问题描述】:

Spring MVC 让控制器返回 DeferredResultListenableFuture(由 ListenableFutureTask 实现)来进行异步响应。有什么不同?我应该什么时候使用它们?

【问题讨论】:

    标签: java spring spring-mvc asynchronous


    【解决方案1】:

    它们在概念上彼此相似,并且可以互换用作控制器的方法结果,这要归功于 ListenableFutureReturnValueHandler 将第二个调整为第一个。

    但是,DeferredResult 类和ListenableFuture 接口来自两个不同的世界:

    1. 首先来自 3.2 版中添加的 org.springframework.web.context.request.async 包。
    2. 第二个来自 org.springframework.util.concurrent 软件包,自 4.0 起提供。

    此外,它们是为不同的需求而添加的。虽然第一个提供了异步提供控制器结果的基本和完整功能,但第二个允许您将实现与现有的类/框架桥接,例如 ExecutorService 框架(参见 ListenableFutureTask)。

    因此,底线是,当您可以自行实现进一步处理时,请使用 DeferredResult ListenableFuture,当您想使用 ExecutorService 时框架。

    【讨论】:

      【解决方案2】:

      DeferredResult 是 Callable 的替代方案,它允许您生成结果。您还可以扩展 DeferredResult 以关联其他数据或行为,以防您稍后需要访问某些数据而无需其他数据结构。但仅此而已。 当您需要向异步任务添加回调时,ListenableFuture 未来会派上用场。 Guava 的 ListenableFuture 实际上允许组合,我不认为 Spring 的 ListenableFuture 可以这样做。 为此,您宁愿使用 Spring 也支持的 CompletableFuture。 您可以非常简单地编写期货,请查看:http://www.deadcoderising.com/java8-writing-asynchronous-code-with-completablefuture/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-25
        • 2016-07-01
        • 1970-01-01
        相关资源
        最近更新 更多