中断后,对象变量仍可用于线程

时间:2016-11-30 20:04:51

标签: java multithreading

我有这个帖子

public class ThreadA extends Thread {

private final String lala = "lala";

@Override
public void run() {
    Scanner scanner = new Scanner(System.in);
    String value = scanner.next();
    while (!value.equals("stop") && !isInterrupted()) {
        value = scanner.next();
    }
    interrupt();
    System.out.println("exit");
}

public String getMe() {
    return lala;
}

}

我想知道为什么我总是可以访问方法getMe(),即使Thread已经被中断了。

为什么会这样?并且这总是可能的,即使在几天之后或者垃圾收集器会删除那个对象吗?

1 个答案:

答案 0 :(得分:2)

interrupt()只是设置一个特殊标志。在你的情况下,它没有做任何特别的事情。

  

我想知道为什么即使Thread已经被中断,我仍然可以访问方法getMe()。

要做到这一点,你必须有一个对ThreadA对象的引用,当你持有该引用时,你总是可以调用它。

  

总是可能的,即使在几天后,垃圾收集器会删除该对象

是的,当线程没有运行时,它只是一个普通的对象,只要你持有对它的引用它就会存在。