设置方法的时间限制/超时

时间:2011-10-06 17:23:23

标签: java methods timeout

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

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

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

4 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:1)

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

与要求完全相同。

当我从您的问题中解释时,您希望该方法运行2分钟。为了实现这一点,你需要启动一个你控制2分钟的线程,然后停止线程。

答案 2 :(得分:-1)

TimeUnit类提供了此方法所需的方法 请在此处查看:TimeUnit in JDK 6

答案 3 :(得分:-3)

  • 如果您希望它运行两秒钟,您可以使用 Thread.sleep(2000)。请注意,Thread.sleep(2000)更像是一个 “建议”而不是“命令”;它不会为完全 2000运行 毫秒,由于JVM中的调度。它几乎可以 简化为大致 2000毫秒。

  • 如果你想让它继续调用forward 2秒钟(这会导致很多函数调用),你会 需要使用某种计时器。