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