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

时间:2011-07-13 08:21:25

标签: java multithreading garbage-collection

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

像这样:

t.start();
t = null;

4 个答案:

答案 0 :(得分:39)

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

答案 1 :(得分:15)

  

线程会发生什么?

没有

  

它会停止吗?

没有

  

是否符合GC的条件?

没有

答案 2 :(得分:2)

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

someThread.interrupt();

来自Oracle文档:

  

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

答案 3 :(得分:0)

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