外部结束无限循环java

时间:2015-06-19 21:20:30

标签: java multithreading external interrupt

我正在编写一个标记由一组学生提交的算法的程序。我打算将他们的算法方法复制到程序中并运行它来查看结果;但是,要求算法运行时间不要超过10秒。

我构造了一个ExecutorService来结束适用于userInput算法的注释算法(已注释掉)但不适用于无限循环。

根据我对线程的了解,中断它需要更改算法(添加标志),并且停止线程被折旧,那么还有其他方法来结束无限循环而不改变算法吗?

以下是代码:

ng-class

3 个答案:

答案 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";
}

但如果您不想修改algorithm()方法,可以查看thisthis

答案 2 :(得分:0)

作为在JVM中的线程中运行不受信任的代码的替代方法,请考虑使用ProcessBuilder触发单独的进程。然后,您可以使用Process destroyForcibly方法终止它。