2014-08-30 79 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对象的实时引用,它将被垃圾收集。

相关问题