【发布时间】:2014-08-30 16:59:12
【问题描述】:
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(),还是应该不用担心?
【问题讨论】:
-
定义解构。
-
如果一个线程正在运行,它可以被 GC 访问。我不明白你想问什么问题。
-
解构:摆脱对象的引用...
-
当所有引用消失时,对象不会自动销毁。 GC 最终会解决它。但是......如果线程仍在运行,那么仍然存在对您的对象的隐式引用。它不会因为您没有引用它而自动停止或收集垃圾。
-
你不应该关心这些事情,你需要关心的只是定义你的线程应该做什么以及它应该做多长时间。因此,请考虑您的线程是否应该在外部中止并根据需要实施。其他一切都取决于 Java。
标签: java multithreading thread-safety terminate