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