我有一个使用第三方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
}
我遵循停止/中断的方法
答案 0 :(得分:2)
问题:如果执行时间超过时间限制,我需要停止当前执行的线程
这里没有简单的答案。通常,您创建一个线程来进行第三方库调用,并创建一个线程来监视时钟,并在计时器到期时终止另一个线程。
您可以调用中断第三方库线程,但正如您所提到的,无法保证callThirdPartyMethod()
将侦听中断。您可以致电stop()
,但这是deprecated for good reasons。
唯一的补充机制是关闭第三方库正在使用的内容。也许可以从库下面关闭套接字或其他连接。
如果没有办法,那么thread.stop()
是你唯一的(不幸的)替代方案,除非你能够找到图书馆的来源。
否则你不幸的是你。