如果不是,谁在调用Java Thread interrupt()方法?

如果不是,谁在调用Java Thread interrupt()方法?,第1张

如果不是,谁在调用Java Thread interrupt()方法?

线程中断机制是获取(协作)线程以响应请求以停止其正在执行的 *** 作的首选方法。任何线程(包括我认为的线程本身)都可以调用

interrupt()
Thread。

在实践中,通常的用例

interrupt()
涉及某种框架或管理器,该框架或管理器告诉某些工作线程停止其正在执行的 *** 作。如果工作线程是“中断感知的”,它将注意到它是通过异常或通过定期检查其中断标志而被中断的。在注意到它已被中断后,行为良好的线程将放弃其正在执行的 *** 作并自行终止。

假设上述用例,如果代码在Java框架中或从某些工作线程中运行,则代码可能会被中断。并且当它被中断时,您的代码应放弃正在执行的 *** 作,并以最适当的方式使其自身结束。根据调用代码的方式,可以通过返回或引发一些适当的异常来完成此 *** 作。但是它可能不应该调用

System.exit()
。(您的应用程序不一定知道为什么它被中断,并且它当然也不知道框架是否需要中断其他线程。)

另一方面,如果您的代码并非设计为在某些框架的控制下运行,则可以辩称,这

InterruptedException
是意外的异常;它可能会导致异常。即一个错误。在这种情况下,您应该像对待其他错误一样对待异常。例如,将其包装在未经检查的异常中,并在处理其他意外的未经检查的异常的同时捕获并记录下来。(或者,您的应用程序可以简单地忽略该中断,然后继续执行其 *** 作。)


1)如果我从来没有自己打过其他线程,什么会触发InterruptedException?

一个示例是,如果您的

Runnable
对象是使用
ExecutorService
shutdownNow()
在服务上调用的。从理论上讲,任何第三方线程池或线程管理框架都可以合法地执行此类 *** 作。

2)如果我从来没有使用过interrupt()自己打断其他线程…

InterruptedException
那么那意味着什么?抓到我该怎么办?关闭我的应用程序?

您需要分析代码库,以弄清楚进行

interrupt()
调用的原因以及原因。一旦弄清楚了,就可以确定应用程序>>您的<<部分需要做什么。

在您知道为什么

InterruptedException
会抛出该错误之前,我建议您将其视为硬错误;例如,将stacktrace打印到日志文件并关闭应用程序。(显然,这并不总是正确的答案……但是重点是,这是“错误”,需要引起开发人员/维护人员的注意。)

3)我怎么知道谁/打来

interrupt()
什么?

没有好的答案。我所建议的最好方法是在上设置一个断点

Thread.interrupt()
并查看调用堆栈。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5478414.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存