我對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