我正在编写一个标记由一组学生提交的算法的程序。我打算将他们的算法方法复制到程序中并运行它来查看结果;但是,要求算法运行时间不要超过10秒。
我构造了一个ExecutorService来结束适用于userInput算法的注释算法(已注释掉)但不适用于无限循环。
根据我对线程的了解,中断它需要更改算法(添加标志),并且停止线程被折旧,那么还有其他方法来结束无限循环而不改变算法吗?
以下是代码:
ng-class
答案 0 :(得分:1)
Google Guava's SimpleTimeLimiter应该有所帮助。只需将ExecutorService
包裹在SimpleTimeLimiter
中,然后使用callWithTimeout
方法指定给定的超时时间段;处理UncheckedTimeoutException
以指示已达到超时。最后,调用shutdown
中包含的ExecutorService
SimpleTimeLimiter
方法。
答案 1 :(得分:0)
您可以在while
循环中完成您的主题:
public static String algorithm(){
long start = System.currentTimeMillis();
long end = start + 10*1000; // 10 seconds?
while (System.currentTimeMillis() < end){ //not-so-infinite loop
System.out.println("Algo is running...");
}
return "test";
}
答案 2 :(得分:0)
作为在JVM中的线程中运行不受信任的代码的替代方法,请考虑使用ProcessBuilder触发单独的进程。然后,您可以使用Process destroyForcibly方法终止它。