首先区分一下这三个发放的返回值,虽然他们长得都很像,但是interrupt方法是一个动作,他的返回值是void,他将调用对象的中断状态进行标记,但是不会让这个进程立即停止;与之相对的另外两个方法的返回值都是boolen类型,表示进程的是否处于中断状态
当然他们也是有区别的,interrupted()的作用是测试当前线程是否被中断(注意是当前进程),返回一个boolean值并清除中断状态,所以在不进行二次中断的情况下,第二次调用时中断状态已经被清除,将返回一个false。他的源码如下,内部实现是调用的当前线程的isInterrupted()。
同时因为interrupted()是一个静态方法,所以调用的时候前面是类名,用对象去调用会返回如下提示:
这么调用的本来意图可能是返回线程 t1 的状态,但是实际上返回的是当前进程(也就是这个语句所在进程的状态),如果想得到 t1 的状态,应该使用isInterrupted()方法
isInterrupted()是实例方法,是调用该方法的对象所表示的那个线程的isInterrupted(),不会重置当前线程的中断状态,它的源码如下:
Java Thread类中的interrupt(),interrupted()以及isInterrupted()
原文:https://www.cnblogs.com/owczhlol/p/13158874.html