ScheduledExecutorService Exception handling

java, multithreading, scheduling

Solution

You should use the `ScheduledFuture` object returned by your `scheduler.scheduleWithFixedDelay(...)` like so :

ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
ScheduledFuture<?> handle =
        scheduler.scheduleWithFixedDelay(new Runnable() {
             public void run() { 
                 throw new RuntimeException("foo");
             }
        }, 1, 10, TimeUnit.SECONDS);

// Create and Start an exception handler thread
// pass the "handle" object to the thread
// Inside the handler thread do :
....
try {
  handle.get();
} catch (ExecutionException e) {
  Exception rootException = e.getCause();
}

Problem

I use ScheduledExecutorService to execute a method periodically. p-code: ``` ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); ScheduledFuture<?> handle = scheduler.scheduleWithFixedDelay(new Runnable() { public void run() { //Do business logic, may Exception occurs } }, 1, 10, TimeUnit.SECONDS); ``` My question: How to continue the scheduler, if `run()` throws Exception? Should I try-catch all Exception in method `run()`? Or any built-in callback method to handle the Exception? Thanks!

Original source