- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
关于 Java 的 InterruptedException 有一些有趣的问题和答案。 ,例如 The Cause of InterruptedException和 Handling InterruptedException in Java .但是,他们都没有告诉我 InterruptedException 的可能来源。
像 SIGTERM、SIGQUIT、SIGINT 这样的操作系统信号呢?在命令行中按 CTRL-C 会产生 InterruptedException 吗?还有什么?
最佳答案
您列出的所有内容都不会产生 InterruptedException
.
唯一可以中断线程的是对 Thread#interrupt()
的调用. JLS对此事比较清楚,来自section 17.2.3 :
17.2.3 Interruptions
Interruption actions occur upon invocation of
Thread.interrupt
, as well as methods defined to invoke it in turn, such asThreadGroup.interrupt
.
参见 the official tutorial on interrupts了解更多信息。具体来说:
A thread sends an interrupt by invoking
interrupt
on theThread
object for the thread to be interrupted. For the interrupt mechanism to work correctly, the interrupted thread must support its own interruption....
The interrupt mechanism is implemented using an internal flag known as the interrupt status. Invoking
Thread.interrupt
sets this flag. When a thread checks for an interrupt by invoking the static methodThread.interrupted
, interrupt status is cleared. The non-staticisInterrupted
method, which is used by one thread to query the interrupt status of another, does not change the interrupt status flag.By convention, any method that exits by throwing an
InterruptedException
clears interrupt status when it does so. However, it's always possible that interrupt status will immediately be set again, by another thread invokinginterrupt
.
这意味着它是一个显式标志,只能通过调用 interrupt()
来设置。 ,而不是由其他未知的外部事件触发。抛出它的各种方法中对异常的描述进一步暗示了这一点,for example (强调我的):
InterruptedException
- if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.
一般而言,中断系统的目的是提供一个通用的、定义良好的框架,以允许线程中断其他线程中的任务(可能是耗时的任务)。虽然您可以在自己的应用程序中使用显式逻辑实现类似的功能,但拥有这种定义良好的机制允许独立类(例如 JDK、其他第三方代码、您自己代码中的其他独立类)以一致的方式提供此功能.
关于处理 InterruptedException
的许多注释和“警告”并不意味着它们可以完全自发地抛出,它们旨在鼓励设计良好的对象,这些对象可以在未知的上下文中使用,其中 interrupt()
会被假定工作(所以真的,你确实想假设如果你正在创建在未来情况下将是健壮的可重用对象,它们可以自发地抛出 - 即你永远不能保证你的代码会赢有一天会被希望中断工作的人使用)。
对于快速的一次性项目,您真的不需要担心这些异常的特殊处理,只要您确定您没有调用 interrupt()
即可。并且不调用可以调用 interrupt()
的东西,但要注意从长远来看的影响,尤其是当您最终在其他上下文中重用该代码时。
关于java - 中断异常 : what causes it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26856242/
我正在尝试使用一个使用 JNI 的库。 我已经尝试了开发人员提供的示例应用程序,它可以工作。所以我知道这不是库中的错误。 我认为我在导入库的过程中做错了什么: 将 .so 文件复制到我的 libs 文
使用Websphere 应用程序服务器 + Wicket 1.6我的挂载 URL 遇到一些问题。 当我调用类似于以下内容的网址时:localhost:9080/danesCooking/pies/me
我有一个应用程序在 Win2k3 VM 上的 Apache Tomcat 5.5 上运行。该应用程序提供 XML,供某些电话设备使用,作为我们 IVR 基础设施的一部分。反过来,应用程序从一些 SOA
升级到雅加达给我带来了一些问题。。我正在使用以下maven插件:。并且我使用episodal编译(有库)。突然间,我面临着以下问题:。更仔细的检查发现,XJC突然生成了以下字段:。这是它以前没有产生的
Jenkins 有一个可用于自由式构建作业的 $CAUSE 变量。 如何在工作流程中访问此内容或类似内容? 我的团队在现有临时构建的电子邮件输出中使用它。我们希望在新的基于工作流的工作中继续这样做。
错误:无法完成 Gradle 执行。 原因: Could not create parent directory for lock file C:\Program Files\Android\Andr
如何确定多个浏览器 UI 事件是否由相同的基本 UI 交互引起? 例如,用户单击和事件监听器会触发“blur”和“mousedown”事件。有没有办法确定这两个事件都是由一次用户点击引起的? 最佳答案
它可以编译,但不会从 .o 文件链接到可执行文件。我已经删除了从现在到运行良好时所做的所有更改(基本上,str_to_int 中的所有内容)。 我的代码: #include #include in
关于 Java 的 InterruptedException 有一些有趣的问题和答案。 ,例如 The Cause of InterruptedException和 Handling Interrup
我使用 android 工具 “内存监视器” 来修复内存泄漏。这很有帮助。 但是,我需要澄清一下。 有时在运行该应用程序后,分配的内存为“47MB”。当与应用交互时,它会上下移动。 然后当我点击“ca
我正在调查由于堆损坏而导致的崩溃。由于这个问题很重要并且涉及分析堆栈和转储结果,因此我决定对与崩溃相关的文件进行代码审查。 坦率地说,我对堆何时可能损坏没有深入的了解。 如果您能提出可能导致堆损坏的方
假设我们有一个名为 feature-branch 的功能分支。该分支的开发人员分支获取他们的票,然后打开一个 PR 到 feature-brach。 如果发生以下情况: 开发人员A从feature-b
两个线程同时访问fileName。 Set If 0 使死锁。但如果 1 一切顺利。 那么是什么导致了这种情况? 最佳答案 确保您没有在主线程上同步调用 +[PHAssetResource asset
不幸的是,我还不是正则表达式专家,因此遇到了以下问题:假设我有一个包含多个链式异常的 Java 堆栈跟踪,我想要达到的是提取以“Caused by”开头的最后一行。 javax.servlet.Ser
我确信这是我所缺少的非常简单的东西。我使用 makeKeyAndOrderFront: 打开一个窗口,它第一次工作。当我关闭窗口并尝试再次打开它时,它退出并给出错误EXC_BAD_ACCESS。我的代
我刚刚探索了 Rank2Types 和 RankNTypes,试图熟悉它们。但我不明白为什么以下不起作用。 g :: (forall a. forall b. a -> b) -> x -> y ->
我想验证输入是否严格是由 10-16 个字符长组成的数字。根据用户输入值,我将在输入字段下方显示一条消息。问题是,当我去使用时为了帮助完成此任务,它会导致应用程序抛出异常。 我是 JSF 新手,我很难
许多内置的 Java 异常无法接受“原因”。有什么方法可以为这些异常指定原因吗? 我希望能够链接异常,就像这个 InterruptedException 示例一样: try{ //thread
我创建了一个 JSP Mysql 和 Bootstrap Crud 应用程序。当我单击“更新”按钮时,将调用函数 validation() 来更新所有字段,在成功更新后,它将重定向到另一个 JSP 页
我看到了奇怪的情况:在我的 Android 应用程序代码中使用类似这样的东西时我没有收到任何错误: @Override public void onBackPressed() { if
我是一名优秀的程序员,十分优秀!