【问题标题】:Set a time limit / timeout for a method为方法设置时间限制/超时
【发布时间】:2011-12-02 10:47:05
【问题描述】:

我有这样一个简单的方法:

public void foo(int runForHowLong) {
    Motor.A.forward();
}

现在希望能够将参数传递给 foo(),它设置了 foo() 将运行多长时间的时间限制。就像我发送 foo(2) 一样,它会运行 2 秒。

【问题讨论】:

标签: java methods timeout


【解决方案1】:

您可以使用 AOP 和来自 jcabi-aspects@Timeable 注释(我是开发人员):

class Motor {
  @Timeable(limit = 1, unit = TimeUnit.SECONDS)
  void forward() {
    // execution as usual
  }
}

当达到时间限制时,您的线程会将interrupted() 标志设置为true,您的工作是正确处理这种情况并停止执行。

【讨论】:

    【解决方案2】:

    在 Stackoverflow 上查看这个问题:Run code for x seconds in Java?

    与需求完全一致。

    正如我从您的问题中所解释的那样,您希望该方法运行 2 分钟。为此,您需要启动一个您控制 2 分钟的线程,然后停止该线程。

    【讨论】:

      【解决方案3】:

      TimeUnit 类提供了所需的方法。
      在这里查看:TimeUnit in JDK 6

      【讨论】:

      • 这并不能解决 x 秒后实际停止操作的部分。
      【解决方案4】:
      • 如果你想让它运行两秒钟,你可以使用 Thread.sleep(2000)。请注意,Thread.sleep(2000) 更像是 “建议”比“命令”;它不会运行确切 2000 毫秒,由于 JVM 中的调度。几乎可以 简化为大约 2000 毫秒。

      • 如果您希望它继续调用 forward 2 秒(这将导致对该函数的多次调用),您将 需要使用某种计时器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-14
        • 2017-03-03
        相关资源
        最近更新 更多