我有一个简单的方法,像这样:
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上的这个问题:在Java中运行代码x秒?
与要求完全相同。
我从你的问题中理解,你想让方法运行2分钟。要做到这一点,你需要启动一个线程,你控制2分钟,然后停止线程。
TimeUnit
类提供了这样做所需的方法。
查看这里:JDK 6中的TimeUnit
-
如果你想让它运行两秒钟,你可以使用
Thread.sleep(2000)
。注意,Thread.sleep(2000)
更像是一个"建议"不如"命令";它不会在 2000下运行毫秒,由于在JVM中进行调度。很有可能简化为大致 2000毫秒。 -
如果您希望它继续调用
forward
2秒(这将导致对该函数的多次调用),您可以这样做