我对 Java 中 Timer 类的行为有疑问。这是代码: http: //pastebin.com/mqcL9b1n
public class Main {
public static void main(String[] args) {
Main m = new Main();
m.foo();
m = null;
}
public void foo() {
Timer t = new Timer();
t.schedule(new SysPrint(), 200);
}
}
class SysPrint extends TimerTask {
public void run() {
System.out.println("Yes!");
}
}
发生的情况是,如果您运行该程序,它将打印“是!” 它不会做任何其他事情(程序不会结束)。
Java 文档说:在对 Timer 对象的最后一个实时引用消失并且所有未完成的任务都完成执行后,计时器的任务执行线程优雅地终止(并成为垃圾收集的对象)。
正如我看到的那样,在“foo()”函数结束后,对 Timer 对象的“最后一次实时引用”就消失了。唯一安排的任务是“是!” 执行的任务,所以我猜在进程打印“是!”之后,Timer 对象应该结束并且进程应该终止。
这里发生了什么?