【问题标题】:Is it possible to stop a function's execution within a specified time in Java?是否可以在 Java 中的指定时间内停止函数的执行?
【发布时间】:2010-07-06 05:32:40
【问题描述】:

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

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

这样可以停止执行吗?

提前致谢

【问题讨论】:

  • 您可以在单独的线程中执行此函数,然后在一段时间后中止线程。
  • 对不起,我没有在程序中使用线程,还有其他可能的吗?

标签: java timer


【解决方案1】:

您可以在函数中添加一些检查:保存函数开始工作时的时间戳,然后定期检查函数内部,如果函数耗时过长则抛出异常。

这是在 Java 中完成此类任务的最简洁方式。

【讨论】:

  • 我开始考虑一些计时器线程和中断进程的机制,但是如果打印是在循环中完成的,那么您的方法会更简单有效。 +1。
【解决方案2】:

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

@BobbyShaftoe 在评论中建议:

您可以在单独的线程中执行此函数,然后在一段时间后中止该线程。

这是具有误导性和危险性的建议。 “中止”线程的唯一方法是使用已弃用的Thread.stop() 方法。如果您查看该方法的 javadoc,您会发现它是一种根本危险的方法,可能会产生不良和不可预测的副作用。

还应注意@tonio 的解决方案不会停止函数的执行。它只是停止等待函数的执行完成。该函数可以无限期地继续执行,消耗资源没有好的效果。

【讨论】:

  • +1 @Stephen C :用于区分实际停止执行和仅在 ceetain 超时后忽略。
【解决方案3】:

您可以使用java.util.concurrent 中的TimeUnit enum,尤其是timedJoin 方法。

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

这很简单:

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

10 秒超时。

【讨论】:

    猜你喜欢
    • 2013-11-05
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多