当对象持有对 运行 线程的引用时,它是否有资格进行垃圾回收?

Can an object be eligible for garbage collection when it holds a reference to a running Thread?

1) 其实问题出在代码里。持有对 运行 线程的引用会阻止对象符合垃圾收集条件吗?

class SomeClass {

    Thread mThread = new Thread(new MyRunnable());

    public SomeClass() {
        mThread.start();
    } 

    public static void main(String[] args) {
        SomeClass sc = new SomeClass();
        sc = null;
        // Will the sc be eligible to gc here?
        ...
    }

    private static class MyRunnable implements Runnable {
        @Override
        public void run() {
            while (true) {} 
        }
    }
}

2) 如果我们对 Thread 使用 Wea​​kReference 而不是 Thread 是否符合条件?

已更新

更新了代码以强调最困扰我的问题。

我想了解的是,实例 运行 线程是否阻止对象被收集?

是否有资格进行垃圾回收取决于谁拥有对 的引用,而不是您拥有对谁的引用。因此,是的,如果一个对象的实例变量包含对 运行 Thread 的引用,那么如果它本身无法从任何活动线程访问,则该对象可以进行垃圾回收。事实上,在您的示例中,在您标记的行中就是这种情况。

如果 收集了这样的对象,那将不会对相关线程产生任何影响。特别是,VM 本身持有对每个活着的 Thread 的引用(即使它当前不是 运行),因此不需要对 Thread 的其他引用来防止它被收集.

当然,持有对线程的弱引用也不会阻止对象被垃圾回收。