(请不要将此重复标记为我之前的问题,它们不是-我正在寻找一个单线程解决方案)。
我需要一个简单的方法来限制java中一些方法的执行时间。
理想情况下,我认为可以这样做:
- 我调用了一个函数或方法
- 如果给定的时间没有返回,
- 它有一个异常。
但是其他的解决方法对我来说都是可以的。我所需要的,实际上相当于unix上的alarm()
libc调用。这可能吗?
我需要一个单线程解决方案。
在java中一切都在线程中运行。为了检查某个线程是否被击中,您需要从"另一个"线程监视它。要么你需要使用TimerTask
来生成新的线程,要么你使用一些api方法,比如ScheduledExecutorService
所以恕我直言,没有多线程很难提供一个优雅的解决方案。
当然也可能有hack,就像我下面展示的那样。但在实际场景中,它们既不优雅,也不值得推荐。
public static void main(String[] args) {
long startMilli = System.currentTimeMillis();
for(int i=0;;i++) {
//Do something
long timepassed = System.currentTimeMillis() -startMilli;
if(timepassed==1000) {
throw new RuntimeException("taking too long");
}
}
}