【发布时间】:2010-07-06 05:32:40
【问题描述】:
我想知道java中如何在指定时间内停止指定函数的执行。
例如:我可能会调用一个名为 print_data() 的函数。如果执行需要更多时间,我将不得不停止该函数的执行。
这样可以停止执行吗?
提前致谢
【问题讨论】:
-
您可以在单独的线程中执行此函数,然后在一段时间后中止线程。
-
对不起,我没有在程序中使用线程,还有其他可能的吗?
我想知道java中如何在指定时间内停止指定函数的执行。
例如:我可能会调用一个名为 print_data() 的函数。如果执行需要更多时间,我将不得不停止该函数的执行。
这样可以停止执行吗?
提前致谢
【问题讨论】:
您可以在函数中添加一些检查:保存函数开始工作时的时间戳,然后定期检查函数内部,如果函数耗时过长则抛出异常。
这是在 Java 中完成此类任务的最简洁方式。
【讨论】:
没有安全的方法来停止线程的执行,除非它是合作的;例如它会定期检查“中断”标志。
@BobbyShaftoe 在评论中建议:
您可以在单独的线程中执行此函数,然后在一段时间后中止该线程。
这是具有误导性和危险性的建议。 “中止”线程的唯一方法是使用已弃用的Thread.stop() 方法。如果您查看该方法的 javadoc,您会发现它是一种根本危险的方法,可能会产生不良和不可预测的副作用。
还应注意@tonio 的解决方案不会停止函数的执行。它只是停止等待函数的执行完成。该函数可以无限期地继续执行,消耗资源没有好的效果。
【讨论】:
您可以使用java.util.concurrent 中的TimeUnit enum,尤其是timedJoin 方法。
您指定等待时间和线程。 timedJoin 将让您的线程执行直到终止,或者如果处理时间超过允许的超时时间,则停止。您可以使用匿名类轻松地将您的方法包装在 Thread 对象中。
这很简单:
SECONDS.timedJoin(
new Thread() {
public void run() {
print_data();
}
},
10);
10 秒超时。
【讨论】: