gpt4 book ai didi

java - 如何限制线程的执行时间并在运行时间过长时将其终止?

转载 作者:行者123 更新时间:2023-11-30 08:18:40 25 4
gpt4 key购买 nike

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

在我的脑海中,我想到了使用一个线程来运行该函数,并在线程运行时间过长时终止该线程,定义如下:

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

然后说 someFunction 可能是:

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

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

但是,在 Java 线程实现中,显然我不能在线程中使用共享变量或任何时间戳以使线程具有时间感,因为 someFunction() 以原子方式运行并且这种检查时间戳的代码只能在 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);
}

关于java - 如何限制线程的执行时间并在运行时间过长时将其终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27329203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com