【问题标题】:What will happen when a Java thread is set to null?当 Java 线程设置为 null 时会发生什么?
【发布时间】:2015-08-04 04:19:39
【问题描述】:

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

像这样:

t.start();
t = null;

【问题讨论】:

    标签: java multithreading garbage-collection


    【解决方案1】:

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

    【讨论】:

    • 你确定它不是 GCed 吗?即使它停止运行?
    • 我也这么认为。这是一个对象。
    • 我认为你的意思是把 running thread is never GCed 加粗,因为现在看起来所有线程都不会被 GCed
    【解决方案2】:

    线程会发生什么?

    什么都没有。

    它会停止吗?

    没有。

    它有资格获得 GC 吗?

    没有。

    【讨论】:

      【解决方案3】:

      不,将引用设置为 null 不会影响线程,除非它少了一个指向它的引用。是的,任何具有指向它的活动引用的对象都不会被垃圾收集。如果您希望线程有资格进行 GC(更重要的是停止做事),那么中断它正在做的事情:

      someThread.interrupt();
      

      来自 Oracle 文档:

      中断是对线程的指示,它应该停止它所执行的操作 正在做和做其他事情。由程序员决定 线程如何响应中断,但很常见 让线程终止

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2013-04-06
          • 2013-09-08
          • 2012-06-16
          • 2017-02-14
          • 2019-07-16
          • 1970-01-01
          • 2013-06-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多