问题形容

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

起因剖析

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

论断总结

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