Я использую ScheduledExecutorService, а после вызова shutdown, я не могу запланировать для него Runnable. Вызов scheduleAtFixedRate(runnable, INITIAL_DELAY,
INTERVAL, TimeUnit.SECONDS)
после shutdown()
вызывает исключение java.util.concurrent.RejectedExecutionException. Есть ли другой способ запустить новую задачу после вызова shutdown()
в ScheduledExecutorService?
ScheduledExecutorService запускает остановку несколько раз
comment
Это ожидаемое поведение. Не могли бы вы объяснить, что вы пытаетесь сделать и почему вы хотите запустить другой исполняемый файл после завершения работы?
- person Jeremy   schedule 17.11.2010
Ответы (3)
Вы можете повторно использовать планировщик, но вы не должны его выключать. Скорее отмените запущенный поток, который вы можете получить при вызове метода scheduleAtFixedRate. Бывший:
//get reference to the future
Future<?> future = service.scheduleAtFixedRate(runnable, INITIAL_DELAY, INTERVAL, TimeUnit.SECONDS)
//cancel instead of shutdown
future.cancel(true);
//schedule again (reuse)
future = service.scheduleAtFixedRate(runnable, INITIAL_DELAY, INTERVAL, TimeUnit.SECONDS)
//shutdown when you don't need to reuse the service anymore
service.shutdown()
person
Alex Objelean
schedule
24.10.2011
Я смог завершить работу и создать новые службы в среде Spring, но EJB меня огорчали. Это помогло, спасибо!
- person Eric Thorbjornsen; 03.08.2012
@Alex Первый будущий объект не будет выпущен, пока служба не будет отключена. Это будет утечка памяти, когда служба будет жить долго и планировать много раз. Если да, то есть ли способ избежать утечки памяти?
- person Nickolas; 09.10.2013
Я ошибаюсь, отмененная futureTask не будет добавлена в workQueue, поэтому она будет выпущена сборщиком мусора.
- person Nickolas; 09.10.2013
Javadocs shutdown()
сказать:
Initiates an orderly shutdown in which previously submitted tasks are executed,
but no new tasks will be accepted.
Таким образом, вы не можете позвонить shutdow()
, а затем запланировать новые задачи.
person
Peter Knego
schedule
17.11.2010
Любые предложения о том, как перепланировать новые задачи после выключения?
- person walters; 18.11.2010
Либо создайте новый ScheduledExecutorService, либо не выключайте существующий. Есть ли причина, по которой вы его закрываете?
- person Peter Knego; 18.11.2010
Вы не можете заставить своего исполнителя принимать новые задачи после его закрытия. Более актуальным вопросом является то, почему вам нужно закрыть его в первую очередь? Создаваемые вами исполнители должны повторно использоваться на протяжении всего жизненного цикла вашего приложения или подсистемы.
person
Kent Murra
schedule
24.10.2011