我有一个方法,我想打电话.但是,我正在寻找一种干净,简单的方法来杀死它或强迫它返回,如果执行时间太长.
我正在使用Java.
为了显示:
logger.info("sequentially executing all batches..."); for (TestExecutor executor : builder.getExecutors()) { logger.info("executing batch..."); executor.execute(); }
我认为TestExecutor
班级应该implement Callable
继续向这个方向发展.
但我想要做的就是停止,executor.execute()
如果它花了太长时间.
建议...?
编辑
收到的许多建议都假设正在执行的方法需要很长时间才能包含某种循环,并且可以定期检查变量.然而,这种情况并非如此.因此,某些东西不一定是干净的,只会停止执行,这是可以接受的.
你应该看一下这些类: FutureTask,Callable,Executors
这是一个例子:
public class TimeoutExample { public static Object myMethod() { // does your thing and taking a long time to execute return someResult; } public static void main(final String[] args) { Callable
Java的中断机制适用于这种情况.如果您希望中止的方法是执行循环,只需让它在每次迭代时检查线程的中断状态.如果它被中断,则抛出InterruptedException.
然后,当你想要中止时,你只需要在适当的线程上调用中断.
或者,您可以使用Sun建议的方法替代已弃用的停止方法.这不涉及抛出任何异常,该方法将正常返回.
我假设在以下语句中使用多个线程.
我已经在这个领域做了一些阅读,大多数作者说杀死另一个线程是个坏主意.
如果要杀死的函数可以设计为定期检查变量或同步原语,然后在设置了该变量或同步原语时干净地终止,那将非常干净.然后某种监视器线程可以休眠几毫秒,然后设置变量或同步原语.