在学习多线程的时候Interrupt()方法大概是我们最开始了解的几个基础概念之一,虽然在生产环境中使用Interrupt()业务场景不多(这只是笔者个人观点),但是还是了解一下,凡事都有个万一嘛。
1、interrupt(),老规矩我们先来看下官方解释。大致的意思是:
这个方法的主要作用是打断线程。
线程总是可以打断自己,当其他线程调用checkAccess 方法来判断是否有权限打断当前线程时可能会抛出SecurityException。
当线程因为调用wait()、join()、sleep()方法造成阻塞时,调用interrupt()方法会把线程的状态设为打断,抛出InterruptedException。我们可以捕获这个异常,然后实现自己的业务逻辑场景。
当线程在IO的InterruptibleChannel通道上阻塞时,调用这个方法把线程的状态设为打断,然后关闭channel通道。
当线程由于channels.Selector造成阻塞时,调用这个方法会把线程的状态设为打断,多路复用器会立即返回结果,类似于直接调用了多路复用器的wakeUp()方法。
中断没有活着的线程没有任何效果。
/**
* Interrupts this thread.
*
* <p> Unless the current thread is interrupting itself, which is
* always permitted, the {@link #checkAccess() checkAccess} method
* of this thread is invoked, which may cause a {@link
*