Wenn eine Ausnahme auftritt, rufe ich shutdownNow() auf meinem ExecutorService auf. Ich dachte, dass isTerminated() mir den Erfolgsstatus geben würde, wahr, wenn alle Threads beendet sind, und andernfalls falsch. Aber ich werde immer wahr, egal was passiert. Irgendeine Empfehlung?Gibt es eine Möglichkeit zu wissen, ob ExecutorService erfolgreich beendet wurde?
Antwort
shutdownNow()
stoppen Aufgaben, die warten. Wenn Sie die aktuell wartenden Threads ausführen wollen, dann versuchen Sie shutdown()
javadoc auf sie ein: http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html#shutdown()
Ich vermute, dass isTerminated() immer wahr zurückgibt, weil Sie shutdownNow()
statt shutdown()
und, gemäß der API-Dokumentation für shutdownNow()
anrufen:
... typischen Implementierungen über Gewinde abgebrochen. interrupt()
Daher klingt es so, als ob Ihre Tasks alle sofort auf den Interrupt-Versuch reagieren, der sie sofort beendet.
Wie die Dokumentation sagt, "isTerminated
ist nie wahr, es sei denn entweder shutdown oder shutdownNow wurde zuerst aufgerufen". Es sagt also nur, ob die Aufgaben beendet wurden, nicht ob sie erfolgreich waren. Sie könnten eine Flagge haben, wie eine AtomicBoolean
und schalten Sie ihren Zustand kurz vor dem erfolgreichen Abschluss. Auf diese Weise würden Sie Methoden von ExecutorService
verwenden, um zu überprüfen, ob die Aufgabe abgeschlossen ist, und Ihr Flag, um zu überprüfen, ob es erfolgreich beendet wurde.
- 1. Gibt es eine Möglichkeit zu wissen, ob Benutzer Mail öffnen?
- 2. Gibt es eine Möglichkeit zu wissen, ob eine Aktivität mit Espresso gestartet wurde?
- 3. Gibt es eine Möglichkeit zu wissen, ob ein Formular minimiert wurde?
- 4. Gibt es eine Möglichkeit zu wissen, ob das Projekt in Eclipse oder Android Studio erstellt wurde?
- 5. Wie finde ich heraus, ob 'svn up' erfolgreich beendet wurde?
- 6. Java gibt es eine Möglichkeit zu sehen, ob eine Taste gedrückt wurde, ohne zu blockieren?
- 7. UIActivityViewController - Gibt es eine Möglichkeit zu wissen, welche Aktivität ausgewählt wurde?
- 8. Java: Gibt es eine Möglichkeit zu wissen, ob ein InputStream eine Readonly-Datei ist
- 9. Gibt es eine Möglichkeit zu sagen, ob eine C# -Assembly mit dem Optimierungsparameter kompiliert wurde?
- 10. Gibt es eine Möglichkeit zu wissen, wann ein Objekt erstellt wurde?
- 11. Gibt es einen Helfer, um zu wissen, ob eine Eigenschaft von Hibernate geladen wurde?
- 12. Gibt es eine Möglichkeit zu wissen, ob Windows 7 Touch auf dem Gerät aktiv ist?
- 13. Gibt es eine Möglichkeit zu wissen, ob ein Status aktiv ist, ohne dass ContextNotActiveException abgefangen wird?
- 14. Gibt es eine Möglichkeit zu wissen, ob Deflate (oder Ihr Z_STREAM) Daten gepuffert hat? zlib C++
- 15. Gibt es eine Möglichkeit zu wissen, ob ein PHP-Skript im CLI-Modus läuft?
- 16. Gibt es eine Möglichkeit zu wissen, ob ein Feld java.awt.Component erweitert?
- 17. Gibt es eine einfache Möglichkeit zu wissen, ob ein modaler Dialog aktuell angezeigt wird?
- 18. Gibt es eine Möglichkeit zu wissen, ob das Dropdown-Menü Tkinter optionsmenu aktiv ist?
- 19. XSLT: Test-Parameter, um zu wissen, ob es gesetzt wurde
- 20. In HTML5 WebAudio wissen, ob der Sound gestoppt wurde oder beendet wurde?
- 21. Gibt es eine Möglichkeit zu überprüfen, ob ein istream im Binärmodus geöffnet wurde?
- 22. Gibt es eine Möglichkeit zu sagen, ob Broadcast Broadcast empfangen wurde?
- 23. Gibt es eine Möglichkeit zu überprüfen, ob eine LINQ to SQL-Entität geändert wurde?
- 24. Gibt es eine Möglichkeit zu überprüfen, ob eine Datei vollständig mit PHP hochgeladen wurde?
- 25. Gibt es eine Möglichkeit zu sagen, ob eine Klasse für java6 kompiliert wurde?
- 26. Korrekte Art zu wissen, ob eine Aktivität zerstört wurde
- 27. Gibt es eine Möglichkeit, die Aufgabe "Nutch Crawl" fortzusetzen, die unerwartet beendet wurde?
- 28. Gibt es eine Möglichkeit zu finden, wo PATH eingestellt wurde?
- 29. Gibt es eine Möglichkeit, eine Funktion auszulösen, nachdem die vorherige Funktion beendet wurde?
- 30. Gibt es eine Möglichkeit zu überprüfen, ob ein Verfahren zum Spring-Controller mit Mockito genannt wurde