Lev*_*ock 3 java multithreading garbage-collection
Java的垃圾收集究竟如何处理线程?
为了澄清,我有一个点对点网络,我用Java编写,如果一个对等体被确定为恶意行为或被路由表拒绝,我删除对Peer对象的所有引用,这扩展了一个线程.
我是否正确地假设即使我删除了对该实例的所有引用,该实例的线程,因此该实例也不会被垃圾收集器删除?
不会.它在运行时不会被收集或停止.
您应该从线程中停止线程,例如使用命令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");
}
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
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
Run Code Online (Sandbox Code Playgroud)
因此,即使在主线程将引用设置为null并停止工作之后,线程也未停止或收集.
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |