Thread t = new Thread(){
public void run(){
while(true){
}
}
};
t.start();
t.interrupt();
System.out.println(t.interrupted());
我遇到一个问题,我在线程上调用中断,然后检查线程是否被中断 - 它总是返回false。为什么呢?
答案 0 :(得分:3)
来自Java Thread docs(我的斜体):
static boolean interrupted()
:测试当前线程是否已被中断。
它实际上是一个静态方法(a)意味着在目标线程中使用,以查看是否有人中断了它,因此你会使用它在t.run()
内。
如果线程碰巧调用抛出该异常的方法(例如Thread.sleep()
),也可以通过InterruptedException通知该线程。
并且,根据上面的链接,在Thread.interrupted()
的详细描述中,线程清除其自身中断状态的方式是调用:
此方法清除线程的中断状态。
要测试不同的线程是否已被中断,请使用非静态isInterrupted()
:
boolean isInterrupted()
:测试此线程是否已被中断。
(a)我经常认为,如果您调用静态(类级别)方法,编译器会警告您将是一个好主意在特定的对象上。我曾经看到过一些人被类似问题所困扰的事件。
然后我想,为什么?使用语言的人应该理解语言,即使是语言的深层角落,C(例如)也有很多少数: - )
答案 1 :(得分:1)
interrupted()是一个静态方法,它在当前线程上调用,请尝试t.isInterrupted()