Was ich brauche, ist eine Methode ähnlich wie shutdownNow, aber in der Lage, neue Aufgaben danach zu senden. Mein ThreadPoolExecutor akzeptiert während meiner Programmausführung eine zufällige Anzahl von Aufgaben.JAVA - Abbrechen der ThreadPoolExecutor laufenden Aufgaben
Antwort
Sie können die Zukunft jeder Einreichung abrufen, diese Zukunft in einer Sammlung speichern und dann, wenn Sie die Aufgaben abbrechen möchten, future.cancel() aller in der Warteschlange befindlichen Aufgaben aufrufen.
Mit dieser Lösung läuft das Executor noch und alle laufenden Aufgaben werden abgebrochen oder nicht ausgeführt, wenn sie in der Warteschlange stehen.
Danke, meine einzige Frage bezüglich Ihre Lösungen hatten ungefähr die Größe der Sammlung, da mein ThreadPoolExecutor unbegrenzte Aufgaben erhalten wird. Aber mit einer Map
Warum erstellen Sie nicht Ihr eigenes ExecutorService
, das dieses Verhalten aufweist?
Werfen Sie einen Blick auf die getQueue() Methode. Ich bin mir ziemlich sicher, dass das Löschen funktioniert (nicht getestet).
GetQueue() kann nur die Aufgaben in der Warteschlange bereinigen. Kann nichts mit den bereits laufenden Aufgaben .. – rgomesf
Ist es nicht genug, getQueue() zu tun und es zu löschen? Wenn Sie wirklich versuchen müssen, Tasks zu stoppen, müssen Sie den ThreadPoolExecutor ableiten und im Wesentlichen shutdownNow() neu implementieren, aber nur das Bit kopieren, das einen Interrupt an jeden Thread sendet. Beachten Sie, dass dies noch keine Garantie ist, dass Sie tatsächlich dazu führen, dass sie sofort aufhören und keine weitere Berechnung vornehmen. Sie brauchen einen völlig anderen Ansatz, wenn Sie das tun müssen.
Ich habe bereits versucht, shutdownNow() zu implementieren, aber einige Variablen sind privat, und ohne sie kann ich nicht tun, was ich will ... – rgomesf
- 1. java 8 ThreadPoolExecutor stuck nach N Aufgaben mit return-Anweisung
- 2. Neuordnungswarteschlange in Java ThreadPoolExecutor
- 3. Ändern der Warteschlangengröße eines ThreadPoolExecutor
- 4. Alle Aufgaben in der Warteschlange eines ThreadPoolExecutor entfernen
- 5. Abbrechen von Aufgaben in der Dispose-Methode
- 6. Java ExecutorService und ThreadPoolExecutor
- 7. Schließen Formular mit laufenden Aufgaben
- 8. Warte auf alle Aufgaben (unbekannte Nummer) zu beenden - ThreadPoolExecutor
- 9. Kommunikation mit lang laufenden Aufgaben in Python
- 10. Abbrechen eines laufenden Buildprozesses in VS
- 11. Nachrüstung 2/OkHttp: Alle laufenden Anfragen abbrechen
- 12. Die Sie threadpoolexecutor
- 13. Java ThreadPoolExecutor bei der Verwendung von ArrayBlockingQueue stecken bleiben
- 14. Work/Task Stehlen ThreadPoolExecutor
- 15. Terminplanung runnable Aufgaben in Java
- 16. Angabe ThreadPoolExecutor Problems
- 17. Zukünftige Aufgabe von ThreadPoolExecutor abgelehnt
- 18. ThreadPoolExecutor ohne Queue
- 19. Wie funktioniert Keep-Alive mit ThreadPoolExecutor?
- 20. Java TimerTask Abbrechen
- 21. Leichte lang laufenden Verfahren Muster
- 22. Java Testamentsvollstrecker abbrechen Job durch Timeout mit inneren Testamentsvollstrecker
- 23. Abbrechen CountDownTimer Android Java
- 24. Java Multithread-App - Futures-Objekte dynamisch abbrechen
- 25. Abbrechen von laufenden Angular $ http-Anfragen bei einer neuen Anfrage
- 26. Abbrechen einer laufenden Aufgabe in Sellerie innerhalb django
- 27. Wie kann ich einen laufenden Azure-Webjob stoppen/abbrechen?
- 28. Wie können Benutzer aus lang laufenden VBA-Aufgaben beendet werden?
- 29. Was ist die optimale Anzahl von laufenden Aufgaben?
- 30. ThreadPoolExecutor blockieren, wenn die Warteschlange voll ist?
Wäre die Option vorhanden, den aktuellen ExecutorService herunterzufahren und durch einen neuen zu ersetzen? – tylermac