【发布时间】:2010-08-17 03:04:01
【问题描述】:
我对 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!");
}
}
如果你运行那个程序,它会打印“Yes!”。而且它不会做任何其他事情(程序不会结束)。
Java 文档说: 在对 Timer 对象的最后一个实时引用消失并且所有未完成的任务都已完成执行后,计时器的任务执行线程将正常终止(并成为垃圾回收的对象)。
当我看到这件事时,对 Timer 对象的“最后一个实时引用”在 'foo()' 函数结束后消失了。唯一安排的任务是“是!”执行的任务,所以我猜在进程打印“是!”之后,Timer 对象应该结束并且进程应该终止。
这里发生了什么?
【问题讨论】:
-
看看 ScheduledExecutorService
标签: java multithreading task schedule