【发布时间】:2015-08-04 04:19:39
【问题描述】:
线程启动后,如果线程的引用设置为null,线程会发生什么?它会停止吗?是否符合 GC 条件?
像这样:
t.start();
t = null;
【问题讨论】:
标签: java multithreading garbage-collection
线程启动后,如果线程的引用设置为null,线程会发生什么?它会停止吗?是否符合 GC 条件?
像这样:
t.start();
t = null;
【问题讨论】:
标签: java multithreading garbage-collection
实时线程将继续运行,即使它的引用设置为 null。
就像任何其他对象一样,当没有对它的引用时,它就有资格进行 GC。棘手的一点是,正在运行的线程在 ThreadGroup 中有一个引用,即使您的程序没有保留一个引用,因此 正在运行的线程永远不会被 GC。
【讨论】:
running thread is never GCed 加粗,因为现在看起来所有线程都不会被 GCed
线程会发生什么?
什么都没有。
它会停止吗?
没有。
它有资格获得 GC 吗?
没有。
【讨论】:
不,将引用设置为 null 不会影响线程,除非它少了一个指向它的引用。是的,任何具有指向它的活动引用的对象都不会被垃圾收集。如果您希望线程有资格进行 GC(更重要的是停止做事),那么中断它正在做的事情:
someThread.interrupt();
来自 Oracle 文档:
中断是对线程的指示,它应该停止它所执行的操作 正在做和做其他事情。由程序员决定 线程如何响应中断,但很常见 让线程终止
【讨论】:
线程将运行,它的引用只是设置为 null,这就是它不符合 GC 条件的原因。
【讨论】: