java if interrupted_java – InterruptedException:是什么原因造成的?

您列出的所有内容都不会产生InterruptedException.

唯一可以中断线程的是对Thread#interrupt()的调用.从section 17.2.3开始,JLS在这个问题上相对清楚:

17.2.3 Interruptions

Interruption actions occur upon invocation of Thread.interrupt, as well as

methods defined to invoke it in turn, such as ThreadGroup.interrupt.

A thread sends an interrupt by invoking interrupt on the Thread 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 method Thread.interrupted, interrupt status is cleared. The non-static isInterrupted 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 invoking interrupt.

这意味着它只是通过调用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()的东西,但是从长远来看,请注意这一点,特别是如果你最终在其他环境中重用该代码.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值