如果我没有调用 Java Thread Interrupt() 方法,那么谁在调用它?

2024-04-12

我已经阅读并重新阅读了实践中的 Java 并发性,我已经阅读了有关该主题的几个线程,我已经阅读了 IBM 文章处理InterruptedException http://www.ibm.com/developerworks/java/library/j-jtp05236.html然而,有一些我根本不明白的事情,我认为可以分为两个问题:

  1. 如果我自己从不中断其他线程,什么会触发中断异常?

  2. 如果我自己从来没有中断过其他线程打断()(说因为我正在使用其他方式取消我的工作线程,例如毒丸和而(!取消)样式循环 [正如 JCIP 中所解释的]),中断异常那么是什么意思?抓到一只后我该怎么办?关闭我的应用程序?


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

在实践中,正常用例interrupt()涉及某种框架或管理器告诉某些工作线程停止他们正在做的事情。如果工作线程是“中断感知”的,它将注意到它已通过异常或通过定期检查其中断标志而被中断。当注意到它被中断时,一个表现良好的线程会放弃它正在做的事情并自行结束。

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

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


1)如果我自己从不中断其他线程,什么会触发InterruptedException?

一个例子是,如果您的Runnable对象是使用ExecutorService and shutdownNow()被服务调用。理论上,任何第三方线程池或线程管理框架都可以合法地执行类似的操作。

2)如果我从来没有使用interrupt()来中断其他线程......InterruptedException那么是什么意思?抓到一只后我该怎么办?关闭我的应用程序?

您需要分析代码库以找出是什么造成了interrupt()电话以及原因。一旦你弄清楚了这一点,你就可以弄清楚应用程序的 >>your

直到你知道为什么InterruptedException被抛出,我建议将其视为硬错误;例如将堆栈跟踪打印到日志文件并关闭应用程序。 (显然,这并不总是正确的答案......但重点是这是“一个错误”,需要引起开发人员/维护人员的注意。)

3) 我如何知道谁/什么来电interrupt()?

对此没有好的答案。我能建议的最好的办法是设置一个断点Thread.interrupt()并查看调用堆栈。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果我没有调用 Java Thread Interrupt() 方法,那么谁在调用它? 的相关文章

随机推荐

  • Java 两个独立键盘的独立输入

    我有两个 USB 键盘插入同一台机器 我正在开发一个 Java 应用程序 是否有办法允许 Java 应用程序分离出它来自哪个 USB 键盘 即是否有类似的东西http docs oracle com javase 6 docs api ja
  • ajax提交表单为什么不能回显$_POST

    我正在使用ajax提交表单进行测试 提交给我自己的页面 new1 php 我想要的是 单击提交按钮后 它将回显名字和姓氏 但我不知道为什么提交后看不到名字和姓氏 这是new1 php页面
  • Zend Framework 2 - 如何包含库中的部分内容

    我写了一个部分 我想在几个模块中使用它 我认为最好的方法是将其放入我的自定义库中 但不幸的是 我无法找到一种方法来包含这个部分 而不使用像这样的非常难看的路径 echo this gt partial vendor myvendor lib
  • HTML5同页导航

    我在 html5 中遇到导航问题 我看了很多教程 我不知道我做错了什么 我想在同一页面上导航
  • Dropbox 是一个有效的快速但肮脏的源代码控制解决方案吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ADB 错误:无法连接到守护程序

    我需要帮助才能让 ADB 在我的 PC win7 64 位 和 Samsung Galaxy S2 上运行 我已经安装了 Kies 附带的驱动程序 我想是在子文件夹 25 escape 下 驱动程序在设备管理器下正确显示为 Samsung
  • Laravel - 如何注册自定义广播者

    我想使用 BroadcastManager 注册自定义广播器 而无需更改内部框架代码 现在我必须在Illuminate Broadcasting BroadcasterManager class protected function cre
  • R:如何使 dump.frames() 包含所有变量,以便稍后使用 debugger() 进行事后调试

    我有以下代码 它会引发错误并使用以下命令写入所有帧的转储dump frames as 提议 e G 通过哈德利 威克姆 http adv r had co nz Exceptions Debugging html a lt 1 b lt H
  • Ruby 比较运算符? == 与 === [重复]

    这个问题在这里已经有答案了 和 有什么区别 什么时候应该使用哪一个 两者都只是在对象上调用的方法 这意味着对象决定哪个意味着什么 然而 Ruby 中有一些关于它们之间差异的约定 通常 比 a b几乎总是为真 如果a b是 阅读此内容的最佳位
  • 如何在 MVC 4 中使用 jQuery 更新 List

    我目前正在尝试使用修改后的索引视图创建设置页面 目标是让用户获得所有设置显示并可以更改一个视图中的所有设置并保存所有设置只需一个按钮 应使用 Ajax 更新设置 我目前的做法 View
  • 如何在 Mockito 中模拟 scala 调用名称

    我试图在mockito 中模拟scala 按名称调用方法 但遇到这个错误 如果匹配器与原始值组合 则可能会出现此异常 不正确 someMethod anyObject 原始字符串 使用匹配器时 所有参数都必须由匹配器提供 例如 正确的 so
  • 为什么迭代器使用“!=”而不是“<”?

    我习惯这样写循环 for std size t index 0 index lt foo size index Do stuff with foo index 但是当我在其他人的代码中看到迭代器循环时 它们看起来像这样 for Foo It
  • Visual Studio 调试器:输入外部函数时中断?

    With 只是我的代码 http msdn microsoft com en us library h5e30exc aspx 关闭并且源位置 服务器 很容易进入代码中没有的函数 但是有没有办法在其中一个函数上设置断点 基本上 我想说 当从
  • 按名称从 css LESS 列表中提取项目

    如果我有一个不太像的列表 colors red f00 green 0f0 blue 00f 我知道我可以循环列表并获取颜色 但如果我想获取特定的颜色怎么办 说我想做 extract colors green 将 0f0 从列表中删除 有没
  • HTML5 Canvas 填充两种颜色

    我需要用两种颜色填充形状 就像棋盘一样 我见过一些 css 的渐变效果 但还没有见过这样的例子 这在 Html5 Canvas 中可能实现吗 你当然可以 事实上 您可以用任何可重复的东西填充任何任意形状 即使是您在画布本身中制作的形状 这是
  • 将内容添加到列表时保持滚动位置 (AngularJS)

    我一直在尝试使用以下方法将一些项目添加到可滚动容器内的列表中ng repeat 最近的应该位于列表的顶部 如果在添加内容时容器的滚动条不在最顶部 我还需要保持滚动位置 这是我的解决方案 但我仍然有问题 Angular 在 dom 中渲染了前
  • PNG 文件格式的 IDAT 块

    我目前正在开发一种基于 png 文件格式的专有文件格式 到目前为止我已经完成了 只是它不起作用 p 我实现的 deflate 解压缩器工作起来就像一个魅力 但 png 解码器不想很好地执行 所以我看了一下原始的 png 文件 该标准规定 在
  • 选择匹配的数组元素并返回选定的字段

    我想知道如何为 Mongoose 查询中匹配的对象数组设置投影 例如 如果我有一个 Mongoose 模型 如下所示 var User new Schema name String children Child var Child new
  • 如何按字母顺序对 NSArray 进行排序?

    如何对填充的数组进行排序 UIFont familyNames 按字母顺序排列 最简单的方法是提供一个排序选择器 苹果的文档 http developer apple com library mac documentation Cocoa
  • 如果我没有调用 Java Thread Interrupt() 方法,那么谁在调用它?

    我已经阅读并重新阅读了实践中的 Java 并发性 我已经阅读了有关该主题的几个线程 我已经阅读了 IBM 文章处理InterruptedException http www ibm com developerworks java libra