Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当Java线程设置为null时会发生什么?_Java_Multithreading_Garbage Collection - Fatal编程技术网

当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过