java线程中断

java中的线程中断,并不是让线程终止,而且通过一个状态为来通知线程是否要中断,该线程中断与否,是让线程自己去判定,而不是外部线程来执行。

interrupt方法,为设置该线程中断位为true,默认为false

isInterrupt方法,判定该线程是否中断,中断true

interrupted方法,判定该线程是否中断,并且将中断状态清除,也就是说连续两次调用的话,第二次一定是false

由于java不能强制终止线程(stop方法已经弃用),所以可以通过interrupt方法来建议线程终止(和gc差不多,都是建议,哈哈),主要说下这个方法,这个方法在运行期的线程是没有任何影响的,也就是运行期的线程不会理睬这个状态位,仍然自己运行自己的,只有在该线程阻塞情况下,才会抛出一个InterruptedException来退出线程的,在这里就能看出来,java线程阻塞一般都是通过wait,sleep,join等方法,同样,这些方法都会抛出InterruptedException异常

总结下,interrupt方法只是更改了线程的状态为,并不能直接将线程终止,同样如果该线程正在运行,并不能终止,只有阻塞的线程才会抛出InterruptedException来通过此方式终止线程



 上面的例子示意了,在运行期的线程,并不能通过interrupt方法来中断线程的,仅仅是改变了状态位



1  示例显示在线程运行状态下,可以通过isInterrupted方法来判定是否进行业务操作,外部线程调用该线程的interrupt中断方法,线程内部通过获取该线程的中断状态位终止业务的进行

2 如果上面开启了线程内部的sleep方法,这个时候类似该进程以及阻塞了,这个时候外部线程调用该线程的interrupt中断方法的话,该线程立马抛出InterruptedException,我们可以通过该异常来终止线程,并在finally中清理一些资源等等

猜你喜欢

转载自lovewen-2004.iteye.com/blog/2421910