java - 如何使用 Spring AsyncResult 和 Future Return

标签 java spring asynchronous

我有一个公共(public)接口(interface) Synchronous,它暴露给多个服务层类。它的目的是根据传递的 id 查找对象图,执行一些业务逻辑,然后将其传递给 Spring 异步方法 Asynchronous.doWork 以完成其余任务。

我正在尝试使用 Spring AsyncResult,但我不确定返回的对象 WorkResult 实际返回到什么。我是否需要在 SynchronousImpl 的某处放置处理程序?想法?

同步公共(public)服务:

public class SynchronousImpl implements Synchronous {
    private Asynchronous async;
    //business logic
    public void doWork(long id){
        async.doWork(id);
    }
}

异步工作类:

public class Asynchronous {
    @Async
    public Future<WorkResult> doWork(long id){
        //business logic
        WorkResult result = new WorkResult(id, "Finished");
        return new AsyncResult<WorkResult>(result);
    }
}

最佳答案

A Future与Spring无关,Future是属于 Java 6 并发框架的类。

一个典型的用例是这样的:

public void doWork(long id) {
    Future<WorkResult> futureResult = async.doWork(id);
    //Do other things.
    WorkResult result = futureResult.get(); //The invocation will block until the result is calculated.
}

异步方法启动后(这是 Spring 帮助其 @Async 注释的地方)调用者立即获得 Future 对象。但是 future 对象不是结果,它只是真实结果的包装器/占位符/代理/引用。

现在调用者和 worker 并行运行并且可以做不同的事情。当调用者调用 futureResult.get(); 并且尚未计算出真正的结果时,该线程将被阻塞,直到 worker 提供结果为止。 (当调用者调用futureResult.get();并且已经计算出真正的结果时,他立即得到结果)

关于java - 如何使用 Spring AsyncResult 和 Future Return,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21313831/

相关文章:

java - 扩展类并在多个构造函数中处理最终变量

spring - Maven 从依赖 jar src/main/resources 加载文件

ios - 全局变量不继承返回的 Firebase 数据 (Swift)

c# - 在不同线程上更新 UI 的正确方法

JAVA:等效指针

java - 如果不打算嵌入 Java 应用程序,将它们制作为 applet 是否会令人不悦?

java - 从 java 项目转换为插件项目的选项在哪里?

java - Sonal lint : change this condition so that it does not always evaluate to true

java - Spring MVC HashMap 表单集成

c# - 在页面中异步加载用户控件