Ich versuche Java ThreadPoolExecutor
Klasse zu verwenden, um eine große Anzahl schwerer Aufgaben mit einer festen Anzahl von Threads auszuführen. Jede der Aufgaben hat viele Stellen, an denen sie aufgrund von Ausnahmen fehlschlagen kann.Behandeln von Ausnahmen von Java-ExecutorService-Tasks
Ich habe ThreadPoolExecutor
unterklassifiziert und ich habe die afterExecute
-Methode überschrieben, die alle nicht abgefangenen Ausnahmen beim Ausführen einer Aufgabe bereitstellen soll. Aber ich kann es nicht funktionieren lassen.
Zum Beispiel:
public class ThreadPoolErrors extends ThreadPoolExecutor {
public ThreadPoolErrors() {
super( 1, // core threads
1, // max threads
1, // timeout
TimeUnit.MINUTES, // timeout units
new LinkedBlockingQueue<Runnable>() // work queue
);
}
protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
if(t != null) {
System.out.println("Got an error: " + t);
} else {
System.out.println("Everything's fine--situation normal!");
}
}
public static void main(String [] args) {
ThreadPoolErrors threadPool = new ThreadPoolErrors();
threadPool.submit(
new Runnable() {
public void run() {
throw new RuntimeException("Ouch! Got an error.");
}
}
);
threadPool.shutdown();
}
}
Die Ausgabe dieses Programms ist "Alles ist in Ordnung - Situation normal!" obwohl das einzige Runnable, das an den Thread-Pool übergeben wurde, eine Ausnahme auslöst. Irgendwelche Hinweise darauf, was hier vor sich geht?
Danke!
Danke, ich habe diese Lösung verwendet. Zusätzlich, falls jemand interessiert ist: Andere haben vorgeschlagen, den ExecutorService nicht abzuleiten, aber ich habe es trotzdem getan, weil ich Tasks überwachen wollte, anstatt sie alle zu beenden und dann get() auf allen zu starten Futures zurückgegeben. – Tom
Eine andere Herangehensweise zum Unterklassifizieren des Executors besteht in der Unterklasse von FutureTask und dem Überschreiben der 'done'-Methode – nos
Tom >> Können Sie bitte Ihren Beispiel-Snippet-Code veröffentlichen, in dem Sie ExecutorService zur Überwachung von Aufgaben nach Abschluss subclasseten ... – jagamot