c12*_*c12 5 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);
}
}
Run Code Online (Sandbox Code Playgroud)
异步工作者类:
public class Asynchronous {
@Async
public Future<WorkResult> doWork(long id){
//business logic
WorkResult result = new WorkResult(id, "Finished");
return new AsyncResult<WorkResult>(result);
}
}
Run Code Online (Sandbox Code Playgroud)
AFuture与 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.
}
Run Code Online (Sandbox Code Playgroud)
在异步方法启动后(这是 Spring 帮助其@Async注释的地方),调用者立即获得Future对象。但是未来的对象不是结果,它只是真实结果的包装器/占位符/代理/引用。
现在调用者和工作者并行运行并且可以做不同的事情。当调用者调用futureResult.get();并且尚未计算实际结果时,该线程将被阻塞,直到工作人员提供结果为止。(当调用者调用futureResult.get();并且已经计算出真正的结果时,他立即得到结果)
| 归档时间: |
|
| 查看次数: |
14028 次 |
| 最近记录: |