当外部线程对某线程调用了thred.interrupt()方法后,java语言的处理机制是这样的:如果该线程处在可中断状态下(调用了Thread.wait()或者Thread.sleep()等特定会发生阻塞的api),那么该线程会立即被唤醒,同时会收到一个InterruptedException,同时,如果是阻塞在IO上,对应的资源会被关闭。如果该线程接下来不执行Thread.interrupted()方法(不是interrupt),那么该线程在处理任何IO资源的时候,都会导致这些资源的关闭。当然,解决的办法就是调用一下interrupted(),不过这里需要程序员自行根据代码的逻辑来设定,根据自己的需求确认是否可以直接忽略该中断,还是应该马上退出。
详细的解释如下:java理论和时间:处理InterruptedException