我对Java中Timer类的行为有疑问。 这是代码:“是的!” http://pastebin.com/mqcL9b1nTimerTask保持运行
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对象应该结束并且进程应该终止。
这里发生了什么事?
看看ScheduledExecutorService – 2010-08-17 19:45:21