2014-09-17 2 views
0

У меня есть простой Timer консольное приложение. Почему это приложение не останавливается после того, как процедура run была выполнена и все еще ждет чего-то?Программа не заканчивается после использования java.util.Timer

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... 

ответ

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(); 
     } 


    } 
1

От the docs:

По умолчанию выполнение задачи Нить не запускается как демон потока, поэтому он способен держать приложение от завершения , Если вызывающий абонент хочет быстро сократить поток выполнения задачи таймера, вызывающий должен вызвать метод отмены таймера.

Смежные вопросы