1、interrupt
interrupt方法用于中断线程。调用该方法的线程的状态为将被置为"中断"状态。
注意:线程中断仅仅是置线程的中断状态位,不会停止线程。需要用户自己去监视线程的状态为并做处理。支持线程中断的方法(也就是线程中断后会抛出interruptedException的方法)就是在监视线程的中断状态,一旦线程的中断状态被置为“中断状态”,就会抛出中断异常。
2.interrupted 是作用于当前线程,isInterrupted 是作用于调用该方法的线程对象所对应的线程。(线程对象对应的线程不一定是当前运行的线程。例如我们可以在A线程中去调用B线程对象的isInterrupted方法。)
这两个方法最终都会调用同一个方法,只不过参数一个是true,一个是false;
这两个方法很好区分,只有当前线程才能清除自己的中断位(对应interrupted()方法)
package com.famous.thread;
public class ThreadStopDemo {
/**
*
* mock thread stop
*
* @author zhenglong
*
*/
public static void main(String[] args) {
Thread thread = new Thread(new StopThread());
thread.start();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
thread.interrupt();
}
static class StopThread implements Runnable {
@Override
public void run() {
int i = 0;
while (true) {
i++;
System.err.println(i);
if (Thread.currentThread().isInterrupted()) {
// 一直输出true
System.err.println(Thread.currentThread().isInterrupted());
// 一直输出true
System.err.println(Thread.currentThread().isInterrupted());
// 一直输出true
System.err.println(Thread.currentThread().interrupted());
// 一直输出false
System.err.println(Thread.currentThread().interrupted());
break;
}
}
}
}
}
来源:oschina
链接:https://my.oschina.net/u/96637/blog/690194