具有静态 WeakReference 的线程是否能够被垃圾收集或强制 MemoryLeak?

Is a Thread with an static WeakReference able to be garbage collected or does it force MemoryLeak?

我问自己,如果这样:

public class thread_FrequentSendingThread extends Thread {

    private static WeakReference<thread_FrequentSendingThread> myThread;

public thread_FrequentSendingThread() {
    myThread = new WeakReference<>(this);
}

public static WeakReference<thread_FrequentSendingThread> getMyThread() {
    return myThread;
}
}

使用静态 WeakReference 会导致 MemoryLeak。 此线程何时准备好进行垃圾回收?

具有静态 WeakReference 的 Activites 可以被垃圾回收吗?

有没有办法让这些东西准备好被垃圾收集?

正如这个问题的全部内容,当我在指定方法或class中使用此弱引用获取强引用时,它们可以被垃圾收集到吗?

让我们假设线程不是 运行(如果线程是 运行,它是垃圾收集根并且不能被释放)。在那种情况下,它可能会被垃圾收集。垃圾收集的规则是,如果没有任何 GC 根对它的强引用路径,它就可以被收集。 GC 根是一个线程、一个静态变量、一个局部变量(任何线程的任何帧中的任何局部变量)或 JNI 引用。

它是否是个好主意是另一个问题。对于 Activities,这是一个可怕的想法——无法保证您一次只有一个 activity 的实例,因此尝试使用对当前 activity 的静态弱引用(通常使用)将会被破坏,当它引用错误的实例时会导致问题。

对于一个线程,它的问题较少,但仍然可能不是正确的解决方案。特别是考虑到无法重新启动已完成的线程。我非常怀疑这是否是完成您想要完成的事情的最佳方式。