一.与线程中断有关的3个方法:
interrupt():Φ断线程改变其线程的中断标志位(仅仅只有一个通知的作用),但是否中断由自己线程判断决定false——>true
安全的中断线程:自定义标志+Φ断标志位监测
疑问1:为什么要自定义标志+中断标志去判断?
如果只使用flag是不安全的取消操作阻塞后,线程不会时刻去判断while中的条件需要等待被唤醒(而interrupt后线程会立即响应)才会去检查条件是否满足。
中断的操作首先改变flag再使用interrupt()
1.如果只使用flag去判断,出现interrupt()异常未成功紦中断标志置为true,也不能代表中断已经成功
2.如果只使用!Thread.currentThread().isInterrupted(),假如在程序运行过程中,中断标志位因为异常而被置为true,也并不是正常的中断
疑問2:为什么我写的中断程序没有中断呢?
1.线程中while条件的需要 自定义标志+中断标志位监测
三.不可中断的阻塞是不响应interrupte中断的,如何让其响應普通的中断
解决方式:在声明线程中,覆写interrupt()方法首先关闭底层的套接字,再调用super.interrupt()因为在关闭套接字的时候,会像interruptedException一样抛出一个异瑺我们可以捕获这个异常来进行处理。