首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有静态WeakReference的线程是否可以被垃圾回收,或者它是否强制MemoryLeak?

具有静态WeakReference的线程是否可以被垃圾回收,或者它是否强制MemoryLeak?
EN

Stack Overflow用户
提问于 2019-08-01 03:13:00
回答 1查看 76关注 0票数 1

我在问自己,如果这样:

代码语言:javascript
复制
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在指定的方法或类中获取强引用时,它们是否可以被垃圾收集到?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-01 23:10:20

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

这是不是一个好主意是另一个问题。FOr活动这是一个可怕的想法-没有承诺你一次只能有一个活动的实例,所以尝试使用一个静态的弱引用到当前的活动(它通常的用法)将是失败的,并且当它引用了错误的实例时会导致问题。

对于一个线程来说,它的问题较少,但仍然可能不是正确的解决方案。特别是考虑到已完成的线程不能重新启动。我强烈质疑这是否是实现你想要实现的目标的最佳方式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57297497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档