ScheduledExecutorService erbt zwei Methoden von ExecutorService , shutdown () und shutdownNow () . Der Unterschied zwischen ihnen:
shutdown
leitet eine geordnete Abschaltung ein, bei der zuvor übergebene Aufgaben ausgeführt werden, aber keine neuen Aufgaben akzeptiert werden. Die Aktivierung hat keine zusätzliche Wirkung, wenn sie bereits heruntergefahren ist.
shutdownNow
versucht, alle aktiven Tasks zu stoppen, stoppt die Verarbeitung wartender Tasks und gibt eine Liste der Tasks zurück, die auf die Ausführung gewartet haben.
Nun möchte ich die Bearbeitung wartender Aufgaben anhalten, während ich gerade laufende Aufgaben nicht unterbrechen möchte. Ich kann die Threads nicht unterbrechen, weil Bibliotheken von Drittanbietern beteiligt sind und sie Interrupts nicht gut behandeln :-( Aber ich muss scheduled Aufgaben, die derzeit nicht ausgeführt werden, da die meisten von ihnen sind geplant in einer Stunde oder so.
Was ist der beste Weg, damit umzugehen? Welche Möglichkeiten habe ich?
Klingt so, als würde man setExecuteExistingDelayedTasksAfterShutdownPolicy (false)
Legt die Richtlinie fest, ob bereits verzögerte Aufgaben ausgeführt werden sollen, selbst wenn Dieser Executor wurde heruntergefahren. In diesem Fall werden nur diese Aufgaben ausgeführt Beenden bei shutdownNow oder nach dem Festlegen der Richtlinie auf false wenn bereits heruntergefahren. Dieser Wert ist standardmäßig wahr.
Da es standardmäßig true
ist, werden diese Aufgaben ausgeführt. Wenn Sie es auf false
setzen, sollten sie nicht mehr ausgeführt werden. Dies sollte nicht mit übermittelten Aufgaben verwechselt werden, auf die sich die von Ihnen zitierten Dokumente beziehen. Sie warten gerade in der Warteschlange, um sofort ausgeführt zu werden, wenn es einen freien Arbeiter gibt.
Tags und Links java java.util.concurrent