ScheduledExecutorService start stop several times

walters picture walters · Nov 17, 2010 · Viewed 21.7k times · Source

I am using ScheduledExecutorService, and after I call it's shutdown method, I can't schedule a Runnable on it. Calling scheduleAtFixedRate(runnable, INITIAL_DELAY, INTERVAL, TimeUnit.SECONDS) after shutdown() throws java.util.concurrent.RejectedExecutionException. Is there another way to run a new task after shutdown() is called on ScheduledExecutorService?

Answer

Alex Objelean picture Alex Objelean · Oct 24, 2011

You can reuse the scheduler, but you shouldn't shutdown it. Rather, cancel the running thread which you can get when invoking scheduleAtFixedRate method. Ex:

//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()