The ScheduledExecutorService class provides a methods for scheduling single or repeated tasks in a number of ways. The following code sample assume that pool has been declared and initialized as follows:
ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);
In addition to the normal ExecutorService methods, the ScheduledExecutorService API adds 4 methods that schedule tasks and return ScheduledFuture objects. The latter can be used to retrieve results (in some cases) and cancel tasks.
The following example schedules a task to start after ten minutes.
ScheduledFuture<Integer> future = pool.schedule(new Callable<>() {
@Override public Integer call() {
// do something
return 42;
}
},
10, TimeUnit.MINUTES);
The following example schedules a task to start after ten minutes, and then repeatedly at a rate of once every one minute.
ScheduledFuture<?> future = pool.scheduleAtFixedRate(new Runnable() {
@Override public void run() {
// do something
}
},
10, 1, TimeUnit.MINUTES);
Task execution will continue according to the schedule until the pool is shut down, the future is canceled, or one of the tasks encounters an exception.
It is guaranteed that the tasks scheduled by a given scheduledAtFixedRate call will not overlap in time. If a task takes longer than the prescribed period, then the next and subsequent task executions may start late.
The following example schedules a task to start after ten minutes, and then repeatedly with a delay of one minute between one task ending and the next one starting.
ScheduledFuture<?> future = pool.scheduleWithFixedDelay(new Runnable() {
@Override public void run() {
// do something
}
},
10, 1, TimeUnit.MINUTES);
Task execution will continue according to the schedule until the pool is shut down, the future is canceled, or one of the tasks encounters an exception.