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