J'ai une question sur le comportement de la classe Timer en Java. Voici le code: « Oui » http://pastebin.com/mqcL9b1nTimerTask continue à fonctionner
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!");
}
}
Ce qui se passe est que si vous exécutez ce programme, il imprimera et ça ne va rien faire d'autre (le programme ne se termine pas). La documentation Java dit: Après que la dernière référence en direct à un objet Timer disparaît et que toutes les tâches en attente ont été exécutées, le thread d'exécution de tâche du temporisateur se termine normalement (et devient sujet à la récupération de place). Comme je vois cette chose, la "dernière référence en direct" à l'objet Timer est allée après la fin des fonctions 'foo()'. Et la seule tâche prévue était le "Oui!" tâche qui a été exécutée, donc je suppose que, après que le processus a imprimé "Oui!", l'objet Timer devrait se terminer et le processus devrait se terminer.
Que s'est-il passé ici?
Jetez un oeil à la ScheduledExecutorService –