线程启动后,如果线程的引用设置为null
,线程会发生什么?它会停止吗?它有资格使用GC吗?
像这样:
t.start();
t = null;
答案 0 :(得分:39)
直播线程将继续运行,即使其引用设置为null 就像任何其他对象一样,当没有对它的引用时,它就有资格使用GC。棘手的一点是,正在运行的线程在ThreadGroup中有一个引用,即使你的程序没有保留一个,因此 正在运行的线程永远不会被GC。
答案 1 :(得分:15)
线程会发生什么?
没有
它会停止吗?
没有
是否符合GC的条件?
没有
答案 2 :(得分:2)
不,将引用设置为null不会影响该线程,除了它有一个较少的引用指向它。是的,任何具有指向它的活动引用的对象都不会被垃圾回收。如果您希望该线程符合GC条件(更重要的是停止执行操作),请中断它正在执行的操作:
someThread.interrupt();
来自Oracle文档:
中断是一个线程的指示,它应该停止它 正在做并做其他事情。这取决于程序员的决定 线程如何响应中断,但这很常见 用于终止的线程
答案 3 :(得分:0)
该线程将运行,其引用只是设置为null,这就是为什么它不符合GC的条件。