假设我有一个像这样的静态方法:
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/