第一篇文章,讲一下线程中断的三个方法
-
void interrupt()方法是用来中断线程的;
-
boolean isInterrupted()方法是用来检测当前线程是否被终端,如果是返回true, 否则返回false;
-
boolean interrupted()方法 同上,但是如果发现当前线程被中断则会清除中断标志,该方法是static方法,可以通过类调用; 通过源码可知道在interrupted()内部是获取当前调用线程的中断标志而不是调用interrupted()方法的实例对象的中断标志
下面通过一段代码阐述:
Thread threadOne = new Thread(new Runnable() {
@Override
public void run() {
for (;;);
}
});
threadOne.start();
threadOne.interrupt();
System.out.println("isInterrupted:" + threadOne.isInterrupted());
System.out.println("isInterrupted:" + threadOne.interrupted());
System.out.println("isInterrupted:" + Thread.interrupted());
System.out.println("isInterrupted:" + threadOne.isInterrupted());
得出结果如下:
isInterrupted:true
isInterrupted:false
isInterrupted:false
isInterrupted:true
这是为什么呢?
第一条是获取threadOne线程当前的中断标志;
第二条虽然调用了threadOne的interrupted()方法,但是获取的是主线程的也就是main thread的中断标志,因为主线程是当前线程;
第三条不用解释了,你懂的;
第四条也不用解释,threadOne的中断标志从来没被重置过,所以一直是true;
与君共勉...
网友评论