将唯一引用设置为null意味着它及其子线程是否被垃圾收集?

Oma*_*eji 1 java multithreading

我有一个必须作为服务生活的应用程序,我创建一个对象,然后产生一大堆线程.

如果我将对该对象的唯一引用设置为null将清除所有子线程?或者我会遭受内存泄漏.

我是否必须显式终止所有子线程?

izb*_*izb 7

线程和静态引用是"根对象".它们不受GCing的影响,任何可以直接或间接追溯到它们的东西都无法收集.因此,只要它们正在运行,就不会收集线程.一旦run方法退出,GC就会占用任何未引用的线程对象.


Jon*_*eet 6

是的,你需要确保你的其他线程停止.垃圾收集器与此无关.你也应该以有序的方式这样做 - 不要只是中止它们.

这是C#中用于合作终止线程的模式 - 很容易转换为Java.