在没有Future返回类型的spring mvc工作的@Async?

时间:2015-07-16 15:50:20

标签: spring spring-mvc spring-4

有时当我使用没有返回类型Future的@Async时,它返回null但有时会返回String。在文档中提到Future的返回类型是必须的。我很困惑为什么会发生这种情况?

例如,这个正在运作

@Service
public class MyClass implements MyClass2{

  @Async
  @Override
  public String getString() {

    return "hello";
  }
}

1 个答案:

答案 0 :(得分:2)

不要String方法返回@Async。这违背了制造商的意图。摘录自Spring Execution & Scheduling docu

  

即使是返回值的方法也可以异步调用。但是,这些方法需要具有Future类型的返回值。这仍然提供了异步执行的好处,以便调用者可以在调用Future上的get()之前执行其他任务。

如果您的异步方法有返回类型,它必须是Future对象!

为什么呢?因为否则方法调用者无法等待已处理@Async方法的Thread的完成。等待线程完成由Future.get

处理