Java 如何使用Spring AsyncResult和Future Return
我有一个公共接口,Synchronous,它公开给几个服务层类。它的目的是根据传递的id查找对象图,执行一些业务逻辑,然后将其传递给Spring异步方法Asynchronous.doWork以完成剩余的任务 我试图使用Spring AsyncResult,但我不确定返回的对象WorkResult实际返回到什么位置。我是否需要在SynchronousImpl中的某个位置放置处理程序?想法 同步公共服务:Java 如何使用Spring AsyncResult和Future Return,java,spring,asynchronous,Java,Spring,Asynchronous,我有一个公共接口,Synchronous,它公开给几个服务层类。它的目的是根据传递的id查找对象图,执行一些业务逻辑,然后将其传递给Spring异步方法Asynchronous.doWork以完成剩余的任务 我试图使用Spring AsyncResult,但我不确定返回的对象WorkResult实际返回到什么位置。我是否需要在SynchronousImpl中的某个位置放置处理程序?想法 同步公共服务: public class SynchronousImpl implements Synchro
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);
}
}
异步工作类:
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);
}
}
公共类异步{
@异步的
公共未来工作(长id){
//业务逻辑
工作结果=新的工作结果(id,“已完成”);
返回新的异步结果(result);
}
}
A与Spring无关,是属于java6并发框架的类
一个典型的用例是:
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.
}
public void doWork(长id){
Future futureResult=async.doWork(id);
//做其他事情。
WorkResult=futuresult.get();//调用将被阻止,直到计算出结果为止。
}
异步方法启动后(也就是Spring帮助其@async
注释的地方),调用者立即获得Future
对象。但未来的对象不是结果,它只是实际结果的包装器/占位符/代理/引用
现在,调用方和工作方并行运行,可以做不同的事情。调用方调用
futuresult.get()时代码>并且实际结果还没有计算出来,这个线程会被阻塞,直到工作线程提供结果为止。(当调用者调用futuresult.get();
并且实际结果已经计算出来时,他会立即得到结果)因此这将阻塞同步线程并保持它直到异步线程完全正确为止?从Spring 4.1(和Java8?)有更好的东西附加到了-基本上现在可以附加回调处理程序,而不是阻塞。