【发布时间】:2011-12-02 10:47:05
【问题描述】:
我有这样一个简单的方法:
public void foo(int runForHowLong) {
Motor.A.forward();
}
现在希望能够将参数传递给 foo(),它设置了 foo() 将运行多长时间的时间限制。就像我发送 foo(2) 一样,它会运行 2 秒。
【问题讨论】:
我有这样一个简单的方法:
public void foo(int runForHowLong) {
Motor.A.forward();
}
现在希望能够将参数传递给 foo(),它设置了 foo() 将运行多长时间的时间限制。就像我发送 foo(2) 一样,它会运行 2 秒。
【问题讨论】:
您可以使用 AOP 和来自 jcabi-aspects 的 @Timeable 注释(我是开发人员):
class Motor {
@Timeable(limit = 1, unit = TimeUnit.SECONDS)
void forward() {
// execution as usual
}
}
当达到时间限制时,您的线程会将interrupted() 标志设置为true,您的工作是正确处理这种情况并停止执行。
【讨论】:
在 Stackoverflow 上查看这个问题:Run code for x seconds in Java?
与需求完全一致。
正如我从您的问题中所解释的那样,您希望该方法运行 2 分钟。为此,您需要启动一个您控制 2 分钟的线程,然后停止该线程。
【讨论】:
TimeUnit 类提供了所需的方法。
在这里查看:TimeUnit in JDK 6
【讨论】:
如果你想让它运行两秒钟,你可以使用
Thread.sleep(2000)。请注意,Thread.sleep(2000) 更像是
“建议”比“命令”;它不会运行确切 2000
毫秒,由于 JVM 中的调度。几乎可以
简化为大约 2000 毫秒。
如果您希望它继续调用 forward 2 秒(这将导致对该函数的多次调用),您将
需要使用某种计时器。
【讨论】: