Ich versuche, Port-Code von Java unter Verwendung von timers-scheduledexecutorservice mitPortieren von Code von Timern mit bis zu ScheduledExecutorService
Ich habe gerade Timer-Instanzen in der Klasse A ersetzen und den folgenden Anwendungsfall
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;
}
}
}
Soll ich Klasse B mit ScheduledExecutorService und die ATimerTask und BTimerTask Klasse zu einer Runnable-Klasse machen, zB für
class B {
public boolean execute() {
try {
final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
scheduler.scheduleWithFixedDelay (new BRunnnableTask(), period, delay);
} catch (Exception e) {
return false;
}
}
}
Ist t sein richtiges.
BEARBEITEN: Eine der Hauptmotivation der Portierung ist, da Laufzeitausnahmen, die in TimerTask ausgelöst werden, diesen einen Thread beenden und nicht weiter geplant werden können. Ich möchte den Fall so vermeiden, dass ieven, wenn ich Laufzeitausnahme habe, der Thread weiter ausführen und nicht anhalten soll.
Das ist sehr wichtig!Executoren sind im Allgemeinen zweifelhaft, wenn sie zum Wiederholen von Tasks verwendet werden, da sie Exceptions schlucken - nun, eigentlich wird die Exception nicht in der FutureTask gespeichert, aber da niemand get() aufruft, ist der Effekt der gleiche. –