isInterrupted
是Thread的一个成员方法,它主要判断当前线程是否被中断
。该方法仅仅是对interrupt
标识的一个判断,并不会影响标识发生任何改变
public class ThreadisInterrupted {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(() -> {
while (true) {
//do nothing, just empty loop.
}
});
thread.start();
TimeUnit.MILLISECONDS.sleep(2);
System.out.printf("Thread is interrupted ? %s\n", thread.isInterrupted());
thread.interrupt();
System.out.printf("Thread is interrupted ? %s\n", thread.isInterrupted());
}
}
// Thread is interrupted ? false
// Thread is interrupted ? true
上面的代码中定义了一个线程,并且在线程的执行单元中(run方法)写了一个空的死循环,记得手动结束上面的程序运行,或者你也可以将上面定义的线程指定为守护线程,这样就会随着主线程的结束导致JVM中没有非守护线程而自动退出。
[Q&A] 为什么不写sleep呢?
因为sleep是可中断方法,会捕获到中断信号,从而干扰我们程序的结果。
-----------------------------------------------------------------------------读书笔记摘自书名:Java高并发编程详解:多线程与架构设计 作者:汪文君