Java Thread终止引用

bli*_*ine 6 java multithreading reference terminate

为什么不能通过将它的引用设置为null并让垃圾收集器删除它来终止线程?这是一个像任何其他的对象,不是吗?

例:


Thread t = new Thread(new Runnable() {
  public void run() {
    //...
  } 
}).start;

t = null;

Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 2

JLS第 12.6 节这样说:

“可到达的对象是可以在任何潜在的持续计算中从任何活动线程访问的任何对象。”

由此我们可以推断,活动线程是隐式可访问的,并且只要它们还活动,就不会被垃圾收集。尽管(正如 @Jon Skeet 所说)线程确实隐式地持有对其自己的 Thread 对象的引用,但对 Thread 对象的可到达引用的存在与否并不相关,因此这Thread.currentThread()将起作用。