程序在java.util.Timer使用后不会终止

时间:2014-09-17 13:43:41

标签: java

我有简单的Timer控制台应用程序。为什么这个应用程序在执行run程序后仍然没有停止等待?

package timer_old;
import java.util.Timer;
import java.util.TimerTask;



public final class FetchMail extends TimerTask {

  public static void main (String[] args) 
  {
    System.out.println("starting");
    TimerTask fetchMail = new FetchMail();
    Timer timer = new Timer();
    timer.schedule(fetchMail, 500);
    //timer.cancel();
    System.out.println("exiting");
  }

  public void run()
  {
    System.out.println("Fetching mail...");
  }


}

输出:

starting
exiting
Fetching mail...

2 个答案:

答案 0 :(得分:1)

来自the docs

  

默认情况下,任务执行线程不作为守护程序线程运行,因此它能够阻止应用程序终止。如果调用者想要快速终止计时器的任务执行线程,则调用者应该调用计时器的cancel方法。

答案 1 :(得分:0)

如果希望定时器在执行运行后立即终止,则需要调用timer.cancel()

public final class FetchMail extends TimerTask {
        static Timer timer=null;
      public static void main (String[] args) 
      {
        System.out.println("starting");
        TimerTask fetchMail = new FetchMail();
         timer= new Timer();
        timer.schedule(fetchMail, 3000);

        //timer.cancel();
        System.out.println("exiting");
      }

      public void run()
      {
        System.out.println("Fetching mail...");
        timer.cancel();
      }


    }