Java 在中断调用之后的中断调用中,线程返回false
我遇到了一个问题,我在线程上调用一个中断,然后检查线程是否被中断——它总是返回false。为什么?interrupted()是一个静态方法,在当前线程上调用它,请尝试t.isInterrupted()(我的斜体):Java 在中断调用之后的中断调用中,线程返回false,java,multithreading,Java,Multithreading,我遇到了一个问题,我在线程上调用一个中断,然后检查线程是否被中断——它总是返回false。为什么?interrupted()是一个静态方法,在当前线程上调用它,请尝试t.isInterrupted()(我的斜体): 静态布尔中断():测试当前线程是否已中断 它实际上是一个静态方法(a),用于在目标线程中查看是否有人中断了它,因此您可以在t.run()本身中使用它 如果线程碰巧调用引发该异常的方法,例如thread.sleep(),那么也可以通过InterruptedException通知线程 根
静态布尔中断()
:测试当前线程是否已中断
它实际上是一个静态方法(a),用于在目标线程中查看是否有人中断了它,因此您可以在t.run()
本身中使用它
如果线程碰巧调用引发该异常的方法,例如thread.sleep()
,那么也可以通过InterruptedException通知线程
根据上面的链接,在Thread.interrupted()
的详细描述中,线程清除自身中断状态的方式是调用它:
此方法清除线程的中断状态
要测试不同的线程是否已中断,请使用非静态的
isInterrupted()
:
布尔isInterrupted()
:测试此线程是否已中断
(a) 我经常认为,如果您在特定对象上调用静态(类级)方法,编译器会警告您,这将是一个好主意。我见过一些人被类似问题所困扰的事件
但我想,为什么?使用一种语言的人应该理解该语言,即使是它的深邃黑暗的角落,C(例如)也有很多:-)请参见此链接:调用isInterrupted时如何重置中断标志?这就是我被中断调用的主要原因。@user2871354,这取决于被中断的线程来处理。
Thread t = new Thread(){
public void run(){
while(true){
}
}
};
t.start();
t.interrupt();
System.out.println(t.interrupted());