有时当我使用没有返回类型Future的@Async时,它返回null但有时会返回String。在文档中提到Future的返回类型是必须的。我很困惑为什么会发生这种情况?
例如,这个正在运作
@Service
public class MyClass implements MyClass2{
@Async
@Override
public String getString() {
return "hello";
}
}
答案 0 :(得分:2)
请不要从String
方法返回@Async
。这违背了制造商的意图。摘录自Spring Execution & Scheduling docu:
即使是返回值的方法也可以异步调用。但是,这些方法需要具有Future类型的返回值。这仍然提供了异步执行的好处,以便调用者可以在调用Future上的get()之前执行其他任务。
如果您的异步方法有返回类型,它必须是Future对象!
为什么呢?因为否则方法调用者无法等待已处理@Async方法的Thread的完成。等待线程完成由Future.get
处理