我想知道如何在java中的指定时间内停止指定函数的执行。
例如:我可以调用一个名为print_data()的函数。如果执行需要更多时间,我将不得不停止该函数的执行。
是否可以像这样停止执行?
提前致谢
答案 0 :(得分:4)
你可以为你的函数添加一些检查:保存函数开始工作时的时间戳,然后定期检查函数内部,如果函数需要太长则抛出异常。
这是用Java完成此类任务的最简洁方法。
答案 1 :(得分:3)
没有安全的方法来阻止线程执行,除非它是合作的;例如它会定期检查“中断”标志。
@BobbyShaftoe在评论中建议:
您可以在单独的线程中执行此函数,然后在一段时间后中止该线程。
这是一种误导和危险的建议。 “中止”线程的唯一方法是使用已弃用的Thread.stop()
方法。如果你看一下这个方法的javadoc,你会发现它是一种根本危险的方法,容易产生不良和不可预测的副作用。
还应该注意,@ tonio的解决方案不会停止函数的执行。它只是停止等待函数的执行完成。该功能可以无限期地继续执行,将资源扼杀到没有好的效果。
答案 2 :(得分:2)
您可以使用java.util.concurrent
中的TimeUnit
enum,特别是timedJoin
方法。
指定等待的时间和线程。 timedJoin
将让您的线程执行直到终止,或者如果处理所花费的时间超过允许的超时时停止。您可以使用匿名类轻松地将方法包装在Thread
对象中。
这可以很简单:
SECONDS.timedJoin(
new Thread() {
public void run() {
print_data();
}
},
10);
10秒超时。