一、interrupt
1、interrrupt 含义:字面意思中断此线程,但实际上只是将调用线程的中断标志设置为true,仅此而已。被设置中断标志的线程将继续正常运行,不受影响。
分析结果可知线程thread对象的中断状态已经为true,但依旧不会影响线程的执行;isInterrupted方法:返回当前线程的中断状态
二、如何使用interrupt中断线程
1、 对于中断线程java 本身提供也一些API,Thread.stop, Thread.suspend, Thread.resume 。这些方法都是暴力中断线程,简单说就是没有经过被终止线程的许可,被强制终止,这样做会产生一些问题。例如:我的任务执行一半,被强制终止了,可实际上我希望该任务执行完了再中断。java设计者可能意思到这样的问题,就把他们废弃(个人理解)
2、线程中断在实际开发中是很有必要的,于是就想到另外一种方案,利用线程通信。例如:A线程希望B线程中断,就给B线程打一个中断标志,至于何时中断由B线程自己决定。
用代码实现该逻辑
分析结果可知当线程thread 收到main线程给他打的中断标记后,何时退出线程,是由thread线程自己决定的。
三、阻塞状态中的线程中断
如果一个线程处于了阻塞状态(如线程调用了thread.sleep、thread.join、thread.wait、1.5中的condition.await、以及可中断的通道上的 I/O 操作方法后可进入阻塞状态),则线程在检查中断标示时如果发现中断标示为true,则会在这些阻塞方法(sleep、join、wait、1.5中的condition.await及可中断的通道上的 I/O 操作方法)调用处抛出InterruptedException异常,并且在抛出异常后立即将线程的中断标示位清除,即重新设置为false。抛出异常是为了线程从阻塞状态醒过来,并在结束线程前我们可以处理中断请求。
分析结果可以看出线程中断抛出异常后,中断状态还原为false
四、interrupted方法
interrupted方法:是检测当前线程的中断状态,并将中断状态设置为false,不能将false设置为true
五、总结
1、对于中断线程,请不要使用JAVA已经抛弃的方法,应该使用interrupt(中断线程)与isInterrupted(获取中断状态)配合,按照自己的实际业务自行中断。这种中断是JVM提供的线程通信标识符,
2、我们也可以自定义线程通信标识符控制线程的运行