当前位置: 首页 > 面试题库 >

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

颛孙嘉玉
2023-03-14
问题内容

我已阅读并重新阅读了《 Java Concurrency in
Practice》,在此主题中阅读了多个线程,阅读了IBM文章《处理InterruptedException》,但我根本不了解某些我认为可以打破的东西。分为两个问题:

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

  2. 如果我从未使用自己的 interrupt() 中断其他线程(例如,因为我正在使用其他方式取消我的工作线程,例如毒药和 while(!cancelled) 样式循环[如JCIP中所述),那该怎么办?那么 InterruptedException 是什么意思?抓到我该怎么办?关闭我的应用程序?


问题答案:

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

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

假设上述用例,如果代码在Java框架中或从某些工作线程中运行,则代码可能会被中断。并且当它被中断时,您的代码应放弃正在执行的操作,并以最适当的方式使其自身结束。根据调用代码的方式,可以通过返回或引发一些适当的异常来完成此操作。但是它可能不应该调用System.exit()。(您的应用程序不一定知道为什么它被中断,并且它当然也不知道框架是否需要中断其他线程。)

另一方面,如果您的代码并非设计为在某些框架的控制下运行,则可以辩称,这InterruptedException是意外的异常;它可能会导致异常。即一个错误。在这种情况下,您应该像对待其他错误一样对待异常。例如,将其包装在未经检查的异常中,并在处理其他意外的未经检查的异常的同时捕获并记录下来。(或者,您的应用程序可以简单地忽略该中断,然后继续执行其操作。)

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

一个示例是,如果您的Runnable对象是使用ExecutorServiceshutdownNow()在服务上调用的。从理论上讲,任何第三方线程池或线程管理框架都可以合法地执行此类操作。

2)如果我从来没有使用过interrupt()自己打断其他线程…
InterruptedException那么那意味着什么?抓到我该怎么办?关闭我的应用程序?

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

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

3)我怎么知道谁/打来interrupt()什么?

没有好的答案。我所建议的最好方法是在上设置一个断点Thread.interrupt()并查看调用堆栈。



 类似资料:
  • 我试图创建一个一次只能创建一个对象的类,所以我创建了私有构造函数和一个公共包装器getInstance()方法,该方法将为这个类创建对象,代码如下

  • 本文向大家介绍knockout.js 如果/如果不是,包括了knockout.js 如果/如果不是的使用技巧和注意事项,需要的朋友参考一下 示例 您可以使用if绑定来确定是否应创建节点的子元素。 if绑定的逆是ifnot 相当于 有时,您无需创建容器就无法控制元素的存在(通常是针对中的<li>元素<ul>或中的<option>元素<select>) 淘汰赛可使用基于注释标签的无容器控制流语法来实现

  • 家谱 假设我们有这样一个家谱图: 我们现在的任务是将这个家谱图写成程序代码的形式。请打开你最喜欢的文本编辑器,输入以下代码。 male(di). male(jianbo). female(xin). female(yuan). female(yuqing). father(jianbo,di). father(di,yuqing). mother(xin,di). mother(yuan,yuqi

  • 所以我对Java相当陌生,我查阅了很多关于静态方法和静态字段的信息,似乎没有什么能真正回答我的问题,所以我想在这里提问。我正在创建一个程序,它使用卡片对象的arrayList并对这些卡片对象执行方法。例如: myCards是数组的名称。列表我不确定是否允许两部分的问题,但我的问题是,像这样的方法应该是静态的,如果是静态的,那么应该在哪里创建类的对象呢?为了澄清最后一部分,在处理静态对象时,应该在实

  • 问题内容: 这两行代码有什么区别: 和 一个比另一个更有效吗? 会更好用吗 问题答案: 使用一下两个版本生成的字节码: 后者的操作较少,因此效率可能会略高一些。 在致谢中指出了),您所进行的操作与操作数量完全相同,只是更改并切换为: : 在这种情况下,除非每次比较所需的工作量有所不同,否则您根本看不到任何性能差异。 但是,请注意,这两个版本 不会永远是逻辑上相同的 ,因为这将取决于实现方式和有问题

  • 本文向大家介绍如果数据效果不好,如何调整内容方向?相关面试题,主要包含被问及如果数据效果不好,如何调整内容方向?时的应答技巧和注意事项,需要的朋友参考一下 理论上根据数据反馈的具体情况调整细节,如打开率对应标题与封面的调整,“震惊体,夸张体”会过时,用户的刺激阈值一直在变,如何找到其中的动态平衡至关重要。内容方面以我一份工作的经历来回答。 公司主营儿童足球教育,推文开始的着力点在足球资讯,足球课程