我有一个公共接口,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);
}
}
答案 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
}
}