Поскольку таймер имеет background thread that continues running:
В соответствии с каждым объектом Timer является один фоновый поток, который используется для выполнения всех задач таймера последовательно. Задачи таймера должны быть выполнены быстро. Если задание таймера занимает слишком много времени, он «свирепствует» выполнение задачи таймера нить. Это может, в свою очередь, задержать выполнение последующих задач, которые может «сгруппироваться» и выполнить в быстрой последовательности , когда (и если) завершающая задача , наконец, завершается.
Поскольку это фоновый поток, он продолжается до выхода JVM или его остановки.
Обновление: немного больше об этом. «Фоновый поток» - это то же самое, что и поток демона, названный по аналогии с процессом демона BSD. Если вы видите Javadocs на Thread, вы найдете:
маркирует эту нить или как демон нить или нить пользователя. Виртуальная машина Java завершает работу только в тех потоках, в которых работает только , всех демонов .
Когда ваш главный абонент останавливается, все пользовательские потоки останавливаются, оставляя только потоки демона. Затем JVM выключается. Хорошо провести время - если коротко позвонить Thread.currentThread().setDaemon(true);
с основного.
Обновление: Ack. У меня было это почти справа. Вы должны сделать таймер демоном во время строительства. (Ли это изменение, или же я просто отказ мозга?)
Во всяком случае, вот пример кода:
import java.util.*;
class Chatter extends TimerTask {
public void run(){
System.err.println("Timer run.");
}
}
public class TryThread {
public static void main(String[] argv){
// If argument is true, only runs a few times.
Timer t = new Timer(false);
t.schedule(new Chatter(), 1L, 1L);
return ;
}
}
Не было бы ужасно, если это действительно уйти? Это сделало бы почти все многозадачные задачи более сложными. –