栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如果不是,谁在调用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()
并查看调用堆栈。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486275.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号