【问题标题】:Does @Asynchronous have a Timeout@Asynchronous 是否有超时
【发布时间】:2013-06-28 14:18:02
【问题描述】:

当我调用这样的方法时:

@Asynchronous
public void cantstopme() {
  for(;;);
}

它会永远运行还是应用服务器会在一段时间后终止它?

【问题讨论】:

    标签: java jakarta-ee asynchronous timeout ejb


    【解决方案1】:

    每当一个注解为@Asynchronous 的方法被任何人调用时,无论该方法实际花费多长时间,它都会立即返回。

    每次调用都应返回一个Future 对象,该对象最初是空的,稍后在相关方法调用实际完成时由容器填充其值。

    例如:

    @Asynchronous
    public Future<String> cantstopme() {
    
    }
    

    然后这样称呼它:

    final Future<String> request = cantstopme();
    

    稍后您可以使用具有特定超时的 Future.get() 方法请求结果,即:

    request.get(10, TimeUnit.SECONDS);
    

    【讨论】:

    【解决方案2】:

    此代码将永远运行。 AS 或独立应用程序,如果运行的代码不是被设计为被中断的,Java 没有合法的手段来中断线程。

    【讨论】:

    • Java 可能没有它,但 EJB 容器可能有..?
    猜你喜欢
    • 2012-05-01
    • 1970-01-01
    • 2012-01-31
    • 2017-06-13
    • 2021-02-28
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多