如何使用Spring AsyncResult和Future Return

时间:2014-01-23 16:24:57

标签: java spring asynchronous

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

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

同步公共服务:

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);
    }
}

2 个答案:

答案 0 :(得分:2)

Future与Spring有关,Future是属于Java 6 concurreny框架的类。

典型的用例是:

public void doWork(long id){
    Future<WorkResult> futureResult = async.doWork(id);
    ... do other stuff        
    WorkResult result = futureResult.get(); //the invoction will block until the result is calculated

}

启动异步方法后(即Spring帮助其@Async注释),调用者立即获得Future对象。但是未来的对象不是结果,它只是实际结果的包装器/占位符/ proyx / reference。

没有调用者和工作者并行运行并且可以执行不同的操作。当调用者调用futureResult.get();并且尚未计算实际结果时,该线程将被阻塞,直到工作者提供结果为止。 (当调用者调用futureResult.get();并且已经计算出实际结果时,他会立即得到结果)

答案 1 :(得分:-1)

@Aysnc
public Future doWork() {
   if (reason) {
      return; // Missing return value error,,but i needn't return anything
   }
}