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.