首页 > 解决方案 > 静态方法中的 TimerTask 在执行之前会被垃圾收集吗?

问题描述

假设我有一个像这样的静态方法:

public static void doSomething() {
    Timer timer = new Timer();
    TimerTask task = new TimerTask() {
        @Override
        public void run() {
            something();
        }
    };
    timer.schedule(task, 1000);
}

当函数返回时,不再引用计时器或任务。在允许任务运行之前,它们是否可能被垃圾收集?如果不是,为什么?

标签: javaandroidasynchronous

解决方案


您的匿名TimerTask实例引用了run(). 这意味着如果其中使用的所有对象run()都被 GC,那么 TimerTask 实例也可以被 GC。

您可以打开一个调试器TimerTask并查看它是否引用了run().

更多信息在这里 匿名类*总是*维护对其封闭实例的引用吗?

简而言之:GC 不会收集任何仍在使用的对象。


推荐阅读