如何在动态加载的类中终止无限循环?

时间:2014-11-26 22:24:23

标签: java

我写了一个程序,自动评估学生提交的编程作业。反射用于加载类和实例化对象。无意的无限循环是学生作业中常见的错误。为每个学生提交分配一个主题。监视器跟踪线程的运行时间,并使用stop()方法终止超过允许的最大时间的线程。我的程序按预期工作,但stop()中的java.lang.Thread方法已弃用。我非常感谢有关更清洁解决方案的建议。

谢谢。

2 个答案:

答案 0 :(得分:6)

stop()中的{p> java.lang.Thread被弃用的原因有很多:它并不总是有效,可能会干扰JVM的运行。

最好的办法是在单独的JVM中运行程序。如果需要,您可以终止进程。

答案 1 :(得分:1)

您应该使用Executor服务和Future API。 https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html

使用期货,您可以执行future.get()并提供允许阻止提供的Callable持续时间的超时。如果callable没有完成,那么在超时后get方法将抛出异常。然后在catch块中,您可以使用future.cancel(true);

取消执行