Mischung aus shutdown () und shutdownNow ()

8

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?

    
steffen 14.03.2016, 15:09
quelle

1 Antwort

4

Klingt so, als würde man setExecuteExistingDelayedTasksAfterShutdownPolicy (false) auf Ihrem Executor sollte den Trick tun:

  

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.

    
Sergey Tachenov 14.03.2016, 15:21
quelle

Tags und Links