interrupt(线程中断)
在某些多线程的场景下,我们需要中断某个正在运行的线程。线程中断的功能也就应运而生。而Thread()。stop()方法是不安全,过时的方法。JDK提供了更为安全的Interrupt()方法来提供中断线程的功能。Interrupt()方法会将对应的是否中断的标志位设置为true,这样开发人员有了更大的自定义空间
Interrupt方法的调用在不同的场景下会产生不同的结果,主要分为以下几种场景
非阻塞场景 --------不会中断
阻塞在synchronized获锁 --------不会中断
阻塞在IO场景 --------若该线程在可中断的通道上的 I/O 操作中受阻,则该通道将被关闭,该线程的中断状态将被设置并且该线程将收到一个 ClosedByInterruptException.对应传统网络IO不会抛出异常,NIO调用阻塞该线程的套接字的close()方法。在这种情形下,如果线程被I/O操作阻塞,该线程将接收到一个SocketException异常,这与使用interrupt()方法引起一个InterruptedException异常被抛出非常相似。
阻塞在sleep,join,wait --------抛出异常(InterruptedException)
interrupt相关方法
public static boolean interrupted() 查看当前线程是否已经中断。并且会清除线程的“中断状态”,即如线程中断标识为true,返回true,并且将其置为false,注意,该方法是静态方法
public boolean isInterrupted() 查看测试线程是否已经中断。
public void interrupt() 中断线程。
更多烟台编程相关资讯,请扫描下方二维码