ScheduledExecutorService dziedziczy dwie metody: od ExecutorService, shutdown() i shutdownNow(). Różnica między nimi:Mieszanina zamknięcia() i zamknięciaNow()
shutdown
inicjuje uporządkowane zamknięcie, w którym wykonywane są wcześniej przesłane zadania, ale żadne nowe zadania nie zostaną zaakceptowane. Inwokacja nie ma dodatkowego efektu, jeśli została już zamknięta.
shutdownNow
próbuje zatrzymać wszystkie aktywnie wykonujące zadania, zatrzymuje przetwarzanie oczekujących zadań i zwraca listę zadań, które czekały na wykonanie.
Teraz chcę zatrzymać przetwarzanie oczekujących zadań, podczas gdy ja nie chcę przerywać aktualnie wykonywanych zadań. Nie mogę przerwać wątków, ponieważ biorą w tym udział biblioteki osób trzecich i nie radzą sobie dobrze z przerwaniami :-(Ale muszę anulować zadania, które nie są obecnie wykonywane, ponieważ większość z nich jest zaplanowana w godzinę.
Jaki jest najlepszy sposób na radzenie sobie z tym co mam opcje
Kombinacja 'shutdown' i [' awaitTermination'] (https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html#awaitTermination-long-java. util.concurrent.TimeUnit-) musi załatwić sprawę. – marcospereira
@marcospereira 'awaitTermination' będzie czekał aż ostatnie zaplanowane zadanie zostanie zakończone. – steffen