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(),还是我不应该担心它?
答案 0 :(得分:3)
正在运行的线程及其对应的Thread
对象是GC root.因此没有资格进行垃圾回收。
如果要GC运行正在运行的线程的Thread
对象,那么该线程将需要停止。如果您已正确实施中断机制,则需要使用interrupt
方法cancel()
线程。一旦线程从其run()
方法返回,它就完成了,不再是GC根。如果你没有对其Thread
对象的实时引用,它将被垃圾收集。