Java的垃圾回收机制如何处理线程?
为了澄清,我正在用Java编写一个点对点网络,如果发现某个节点表现恶意或被拒绝加入路由表,我会删除所有对该节点对象的引用,该对象扩展了一个线程。
我是否可以认为,即使我删除了对该实例的所有引用,线程仍然存在,并且因此实例也不会被垃圾回收器移除?
Java的垃圾回收机制如何处理线程?
为了澄清,我正在用Java编写一个点对点网络,如果发现某个节点表现恶意或被拒绝加入路由表,我会删除所有对该节点对象的引用,该对象扩展了一个线程。
我是否可以认为,即使我删除了对该实例的所有引用,线程仍然存在,并且因此实例也不会被垃圾回收器移除?
return;
。public class Main {
public static void main(String[] args) {
Runnable r = new Runnable(){
public void run() {
for (int i=0; i < 10; i++) {
System.out.println("Thread is running");
}
return;
}
};
Thread t=new Thread(r);
t.start();
t=null;
System.out.println("App finished");
}
}
这是结果:
App finished
Thread is running
Thread is running
Thread is running
Thread is running
Thread is running
Thread is running
Thread is running
Thread is running
Thread is running
Thread is running
因此,即使主线程将引用设置为null并停止工作,该线程仍未停止或收集。
volatile boolean stop
或类似的东西。另外,或者可以使用Thread.interrupt
(不要吞掉该异常)。 - maaartinus