2014-08-30 80 views
0
public class MyClass extends Thread{ 
    public void run() { 

     try { 
      while(!Thread.currentThread().isInterrupted()) { 
      // ... 
      } 
     } catch (InterruptedException consumed) 
      /* Allow thread to exit */ 
     } 

    } 
    public void cancel() { interrupt(); } 

    //etc. 
} 

因爲某種原因,在解構對象之前我應該​​總是調用cancel(),還是不應該擔心?如果對象不再被引用,那麼對象的「線程」擴展線程會發生什麼?

+4

定義_deconstructing_。 – 2014-08-30 08:48:41

+0

如果一個線程正在運行,它可以通過GC訪問。我不明白你想問什麼問題。 – tmyklebu 2014-08-30 08:50:03

+0

解構:擺脫對象的引用... – 2014-08-30 08:51:26

回答

3

正在運行的線程及其對應的Thread對象是GC root.因此它不適用於垃圾收集。

如果您想GC正在運行的線程的Thread對象,該線程將需要停止。如果您已正確實施中斷機制,則需要interrupt您的線索與cancel()方法。一旦線程從其run()方法返回,它就完成並且不再是GC根目錄。如果您再沒有對其Thread對象的實時引用,它將被垃圾收集。

相關問題