Java 在中断调用之后的中断调用中,线程返回false

Java 在中断调用之后的中断调用中,线程返回false,java,multithreading,Java,Multithreading,我遇到了一个问题,我在线程上调用一个中断,然后检查线程是否被中断——它总是返回false。为什么?interrupted()是一个静态方法,在当前线程上调用它,请尝试t.isInterrupted()(我的斜体): 静态布尔中断():测试当前线程是否已中断 它实际上是一个静态方法(a),用于在目标线程中查看是否有人中断了它,因此您可以在t.run()本身中使用它 如果线程碰巧调用引发该异常的方法,例如thread.sleep(),那么也可以通过InterruptedException通知线程 根

我遇到了一个问题,我在线程上调用一个中断,然后检查线程是否被中断——它总是返回false。为什么?

interrupted()是一个静态方法,在当前线程上调用它,请尝试t.isInterrupted()

(我的斜体):

静态布尔中断()
:测试当前线程是否已中断

它实际上是一个静态方法(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());