乐趣区

关于java:InterruptedExceptions会清除线程的中断状态

问题形容

如图,之前有个疑难:
1 处曾经给 thread 设置了中断,当主线程执行完 1 后,thread 再循环到 2 处代码时,中断状态应该是 true,这是应该走不进 while 循环而线程完结,可是后果为啥没有完结,而是持续循环执行。

起因剖析

4 处抛出 InterruptedException 时,相当于 被动的革除了中断标记。因为 JVM 认为你如果 catch 了这个中断异样,就代表你要去解决它,所以 JVM 会革除中断状态,防止每次抛出异样后还须要手动去做革除中断状态等操作。这样做,如果你只是简略地 catch 住,并不打算解决,那么就须要复原被革除的中断位,让下层通晓,所 3 处以须要再次调用 interrupt()。

论断总结

能够这样认为:main 线程被动中断 thread 线程后,thread 线程抛出异样,这时 thread 线程是否中断应该由 thread 本人决定,即在 catch 块中写逻辑,所以 InterruptedException 就去革除 main 线程执行后的中断状态。

退出移动版