中断调用后,线程在中断调用时返回false

时间:2015-02-25 05:38:49

标签: java multithreading

    Thread t = new Thread(){
        public void run(){
            while(true){

            }
        }
    };

    t.start();

    t.interrupt();
    System.out.println(t.interrupted());

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

2 个答案:

答案 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()