是否可以在Java中的指定时间内停止函数的执行?

时间:2010-07-06 05:32:41

标签: java timer

我想知道如何在java中的指定时间内停止指定函数的执行。

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

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

提前致谢

3 个答案:

答案 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秒超时。