繁体   English   中英

如何限制线程的执行时间并在运行时间过长时终止该线程?

[英]How to limit a thread's execution time and terminate it if it runs too long?

我的问题的一个一般情况是,如何检测某个函数调用是否花费了太长时间以至于我们想终止它?

我想到要使用一个线程来运行该函数,并在运行时间过长时终止该线程,如下所示:

class MyThread extends Thread
{
  public void run()
  {
    someFunction();
  }
}

并说someFunction可能是:

public void someFunction()
{
  // Unknown code that could take arbitrarily long time. 
}

在上面的代码中, someFunction()可能没有时间完成,或者花了很长时间,所以说我想在花费太长时间时停止它。

但是,在Java线程实现中,显然我不能在线程中使用共享变量或任何时间戳,以使线程具有时间感,因为someFunction()原子性很someFunction()而此类check-timestamp代码只能跟随someFunction ,因此变得无用,因为在执行编码时,someFunction已经完成。

注意,我也想在不someFunction()情况下这样做。 也就是说, someFunction()不必担心它会运行多少时间。 它根本不应该意识到这一点。

谁能提供一些有关如何完成此功能的见解?

我将使用ExecutorService运行线程。 然后我将返回一个Future并使用带有超时的get()来取消它。

ExecutorService es = Executors.newFixedThreadPool(1); // You only asked for 1 thread
Future<?> future = es.submit( new Mythread() );
try {
    future.get(timeout, TimeUnit.SECONDS); // This waits timeout seconds; returns null
} catch(TimeoutException e) {
    future.cancel(true);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM