Java中断机制
Java中的中断其实是一种协作的机制,让你可以更好的构造可取消任务。如果正在执行的任务强制结束,那么很可能会造成数据不一致的情况,而中断不要求立即返回,对于阻塞方法响应中断的方式是抛出InterruptedException,其他的方法响应中断的方式仅仅是标记这个任务被中断了,并不会立即退出运行,但是通过这个中断标记可以让上层调用方法感知到这个方法被中断过,可以增加业务上的响应中断的方法。
Java设计者设置中断标志的目的,实际上是想被通知的线程自己来终止,而sleep/wait/join这些方法都会将当前线程阻塞掉,被阻塞的线程调用interrupt方法是不合理的。
InterruptedException
当线程正在执行 join / sleep /wait方法时,调用interrupt会 throws **InterruptedException**。
阻塞线程调用了interrupt()方法,那么会抛出异常,设置标志位为false,同时该线程会退出阻塞的
interrupt方法压根是不会对线程的状态造成影响的,它仅仅设置一个标志位罢了
interrupt线程中断还有另外两个方法(检查该线程是否被中断):
- 静态方法interrupted()–>会清除中断标志位
- 实例方法isInterrupted()–>不会清除中断标志位