gpt4 book ai didi

java - 在时间限制后停止/中断线程

转载 作者:行者123 更新时间:2023-11-30 02:50:29 27 4
gpt4 key购买 nike

我有一个使用第三方 jar 来执行某些任务的应用程序。我的应用程序使用 Spring Executor 池来生成线程。

问题:如果执行时间超过时间限制,我需要停止当前线程的执行

我做了什么:我用谷歌搜索了很多关于中断线程的信息。大多数人说检查中断标志线程是否被中断,如果被中断则抛出中断异常。但在线程中,我正在调用第三方 jar 中的一个方法,该方法可以完成大部分工作,因此我无法去那里更改用于检查中断标志的代码。

考虑以下代码片段:

public void run() {
boolean isDone = false;
isDone = callThirdPartyMethod(); // here for some inputs thread takes more time (even never return for an hour!!) to process which I don't want and I need to stop/interrupt the thread
}

我遵循的停止/中断它的方法

  1. 我写了一个 TimerTask 来检查线程超过时间限制并对其调用interrupt()(但是它当他们继续执行时似乎没有任何反应)。
  2. 我将 TimerTask 的代码从中断更改为调用线程上的 stop() 。这有效,但会引发 ThreadDeath 错误。我在大多数博客甚至 stackoverflow 中读到的内容是我们永远不应该调用 stop 方法。

最佳答案

Question: I need to stop the current execution of a thread if the executing time exceeds the time limit

这里没有简单的答案。通常,您创建一个线程来进行第三方库调用,并创建一个线程来监视时钟并在计时器到期时杀死另一个线程。

您可以调用中断第三方库线程,但正如您提到的,不能保证 callThirdPartyMethod() 会监听中断。您可以调用 stop() 但这是 deprecated for good reasons .

唯一的添加机制是关闭第三方库正在使用的东西。也许可以从库下关闭套接字或其他连接。

如果没有办法做到这一点,那么 thread.stop() 是您唯一的(不幸的)替代方案,除非您可以获取库的源代码。

否则不幸的是,你就是 SOL。

关于java - 在时间限制后停止/中断线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38820269/

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