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

当Java线程设置为null时会发生什么?,java,multithreading,garbage-collection,Java,Multithreading,Garbage Collection,线程启动后,如果线程的引用设置为null,线程会发生什么情况?它停了吗?它符合GC的条件吗 像这样: t.start(); t = null; 活动线程将继续运行,即使其引用设置为null。 就像任何其他对象一样,当没有对它的引用时,它符合GC的条件。棘手的一点是,即使您的程序没有保留线程组中的引用,正在运行的线程也有一个引用,因此运行的线程永远不会被GCed。 线程会发生什么情况 没什么 它停了吗 没有 它符合GC的条件吗 否。否,将引用设置为null不会影响线程,除非它少了一个指向它的引用

线程启动后,如果线程的引用设置为
null
,线程会发生什么情况?它停了吗?它符合GC的条件吗

像这样:

t.start();
t = null;

活动线程将继续运行,即使其引用设置为null。
就像任何其他对象一样,当没有对它的引用时,它符合GC的条件。棘手的一点是,即使您的程序没有保留线程组中的引用,正在运行的线程也有一个引用,因此运行的线程永远不会被GCed。

线程会发生什么情况

没什么

它停了吗

没有

它符合GC的条件吗


否。

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

someThread.interrupt();
从Oracle文档:

中断是向线程发出的一种指示,它应该停止它所执行的操作 是在做和做别的事情。由程序员决定 线程响应中断的确切方式,但这是非常常见的 让线程终止


线程将运行,其引用仅设置为null,这就是它不符合GC的原因。

您确定它不是GCed吗?即使在它停止运行之后?我也这么认为。这是一个对象。我想你是想大胆指出一个
运行的线程从来没有被GCed
,因为它现在看起来好像所有的线程都从来没有被GCed过