2010-07-06 37 views
5

我想知道如何在java中指定的时间内停止指定函数的执行。是否可以在Java中的指定时间内停止函数的执行?

例如:我可能会调用一个名为print_data()的函数。如果需要更多时间来执行,我将不得不停止该函数的执行。

是否可以像这样停止执行?

在此先感谢

+0

您可以在单独的线程中执行此函数,然后在一段时间后中止线程。 – BobbyShaftoe 2010-07-06 05:35:00

+0

对不起,我没有在程序中使用线程,任何其他可能的是在那里? – 2010-07-06 05:42:27

回答

4

你可以添加一些检查,你的功能:保存时间戳记功能开始工作,然后定期检查里面的功能,抛出异常,如果函数的时间太长。

这是在Java中完成这种任务的最简单的方法。

+0

我开始考虑一些计时器线程和中断进程的机制,但是如果打印是在一个循环中完成的,那么您的方法就简单得多并且更加有效。 +1。 – 2010-07-06 05:43:41

2

您可以使用java.util.concurrentTimeUnit enum,特别是timedJoin方法。

您指定一个等待的时间和一个线程。 timedJoin将让您的线程执行直到终止,或者如果处理比允许的超时花费更多时间,则停止。您可以使用匿名类轻松地将您的方法包装在Thread对象中。

这可以是那么容易,因为:

SECONDS.timedJoin(
    new Thread() { 
     public void run() { 
     print_data(); 
     } 
    }, 
    10);  

用于10秒超时。

3

没有安全的方法来停止执行线程,除非它是合作的;例如它会定期检查'中断'标志。

@BobbyShaftoe表明,这在注释:

你可以在一个单独的线程中执行此功能,然后在一段时间后中止该线程。

这是误导性和危险的建议。 “中止”线程的唯一方法是使用已弃用的Thread.stop()方法。如果你看看这种方法的javadoc,你会发现它是一个基本上危险的方法,容易产生不良和不可预知的副作用。

还应该指出,@ tonio的解决方案不会停止函数的执行。它只是停止等待函数的执行完成。该功能可以无限期地继续执行,咀嚼资源不会产生任何效果。

+0

+1 @Stephen C:区分实际停止执行和仅在ceetain超时后忽略。 – bguiz 2010-07-06 06:29:35

相关问题