Java线程设置为null时会发生什么?

线程启动后,如果线程的引用设置为null ,那么线程会发生什么? 它会停止吗? 它有资格获得GC吗?

喜欢这个:

 t.start(); t = null; 

Live线程将继续运行,即使其引用设置为null。
就像任何其他对象一样,当没有对它的引用时,它就有资格使用GC。 棘手的一点是,正在运行的线程在ThreadGroup中有一个引用,即使你的程序没有保留一个,因此一个正在运行的线程永远不会被GCed。

线程会发生什么?

没有。

它会停止吗?

没有。

它有资格获得GC吗?

没有。

不,将引用设置为null不会影响线程,除了它有一个较少的引用指向它。 是的,任何具有指向它的活动引用的对象都不会被垃圾回收。 如果您希望该线程符合GC条件(更重要的是停止执行操作),请中断它正在执行的操作:

 someThread.interrupt(); 

来自Oracle文档:

中断是一个线程的指示,它应该停止它正在做的事情并做其他事情。 由程序员决定线程如何响应中断,但线程终止是很常见的

该线程将运行,其引用仅设置为null,这就是为什么它不符合GC的条件。