Je suis en train de code le port d'utiliser java timers à l'aide scheduledexecutorserviceCode portage de l'utilisation des minuteries pour scheduledexecutorservice
Je l'utilisation suivant le cas
class A {
public boolean execute() {
try {
Timer t = new Timer();
t.schedule (new ATimerTask(), period, delay);
} catch (Exception e) {
return false;
}
}
}
class B {
public boolean execute() {
try {
Timer t = new Timer();
t.schedule (new BTimerTask(), period, delay);
} catch (Exception e) {
return false;
}
}
}
Dois-je remplacer seulement les instances de minuterie en classe A et classe B avec ScheduledExecutorService et faire la classe ATimerTask et BTimerTask à une classe Runnable, par exemple
class B {
public boolean execute() {
try {
final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
scheduler.scheduleWithFixedDelay (new BRunnnableTask(), period, delay);
} catch (Exception e) {
return false;
}
}
}
est t son correct.
EDIT: L'une des principales motivations du portage est que les exceptions d'exécution lancées dans TimerTask détruisent un thread et ne peuvent plus être planifiées. Je veux éviter le cas afin que ieven si j'ai l'exception d'exécution le fil devrait continuer à s'exécuter et ne pas s'arrêter.
Ceci est très important!Les exécuteurs en général sont douteux lorsqu'ils sont utilisés pour répéter des tâches parce qu'ils avalent des exceptions - et non réellement, l'exception est stockée dans la FutureTask, mais comme personne ne l'appelle get() lors d'une tâche répétée, l'effet est le même. –