中斷

2016-11-30 60 views
-1

後仍然可以使用一個線程的對象變量我有這個線程中斷

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(),即使線程已經中斷。

這是爲什麼?而且這種情況總是可能的,即使在幾天之後,或者當垃圾收集器有些時候會刪除該對象?

+2

線程與對象無關。你在你自己的線程上調用該方法。 – SLaks

+2

首先,'interrupt'只是'Thread'實例上的'boolean'標記,它對線程沒有直接影響。其次,執行的線程是一回事,'Thread'類的一個實例是完全不同的東西。只要你持有對它的引用,它就是可訪問的,並且當相應的執行線程處於活動狀態時,它始終可以作爲currentThread()來訪問。 –

回答

2

interrupt()只設置一個特殊標誌。在你的情況下,它沒有做任何特別的事情。

我想知道爲什麼我總是可以訪問方法getMe(),即使線程已經中斷。

要做到這一點,你必須有一個對ThreadA對象的引用,當你持有該引用時,你總是可以調用它。

是總是可能的,甚至幾天後或將垃圾收集somewhen刪除對象

是的,當線程沒有運行,它只是一個普通的物體,像任何其他的,它會只要你持有對它的引用就存在。