java - 静态方法中的 TimerTask 在执行之前会被垃圾回收吗?

标签 java android asynchronous

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

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

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

最佳答案

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

您可以在 TimerTask 上打开调试器,并查看它对 run() 中使用的对象的引用。

更多信息请点击这里 Do anonymous classes *always* maintain a reference to their enclosing instance?

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

关于java - 静态方法中的 TimerTask 在执行之前会被垃圾回收吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53429662/

相关文章:

android - 如何使用 Android 订阅多个 BluetoothLE 特性

javascript - 调用由 key 标识的异步函数

Java,通过输入/输出流发送数据

java - 使用什么 URL 来解锁本地 JNLP 的 Java Security

java - 使用 SQLException 检查 Java 程序中是否存在 MySQL 表

java.lang.IndexOutOfBoundsException : Invalid index 2, 大小为 2 错误

java - 如何覆盖 Spring bean 定义但仍然引用被覆盖的 bean?

android - 我如何将@string 放入setHint

javascript - 如何避免同步 XMLHttpRequest

javascript - 从 node.js 返回文件的解析输出