我有一个必须作为服务生活的应用程序,我创建一个对象,然后产生一大堆线程.
如果我将对该对象的唯一引用设置为null将清除所有子线程?或者我会遭受内存泄漏.
我是否必须显式终止所有子线程?
线程和静态引用是"根对象".它们不受GCing的影响,任何可以直接或间接追溯到它们的东西都无法收集.因此,只要它们正在运行,就不会收集线程.一旦run方法退出,GC就会占用任何未引用的线程对象.
是的,你需要确保你的其他线程停止.垃圾收集器与此无关.你也应该以有序的方式这样做 - 不要只是中止它们.
这是C#中用于合作终止线程的模式 - 很容易转换为Java.