我在问自己,如果这样:
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会被垃圾回收吗?
有没有办法让这些东西做好垃圾回收的准备?
因为这个问题是关于,当我使用这个WeakReference在指定的方法或类中获取强引用时,它们是否可以被垃圾收集到?
发布于 2019-08-01 23:10:20
让我们假设线程没有运行(如果线程正在运行,那么它就是一个垃圾收集根,不能被释放)。在这种情况下,它可以被垃圾收集。垃圾收集的规则是,如果没有从任何GC根到它的强引用的路径,就可以收集它。GC根是一个线程、一个静态变量、一个局部变量(任何线程的任何框架中的任何局部变量)或一个JNI引用。
这是不是一个好主意是另一个问题。FOr活动这是一个可怕的想法-没有承诺你一次只能有一个活动的实例,所以尝试使用一个静态的弱引用到当前的活动(它通常的用法)将是失败的,并且当它引用了错误的实例时会导致问题。
对于一个线程来说,它的问题较少,但仍然可能不是正确的解决方案。特别是考虑到已完成的线程不能重新启动。我强烈质疑这是否是实现你想要实现的目标的最佳方式。
https://stackoverflow.com/questions/57297497
复制相似问题