Another type of task pool is the scheduled task pool. Judging by the name, we can assume that we use this type to schedule when a particular task should be launched.
This type of service is useful when we have a task to launch an activity after some time has elapsed or we want to schedule a recurring task.
To use one, we call Executors.newScheduledThreadPool(1).
We'll talk about the parameters a little later. But for now, what we need to know is that when this method is called we get a ScheduledExecutorService object.
ScheduledExecutorService is an interface that extends ExecutorService.
The following methods appear in this interface:
Method | Explanation |
---|---|
|
Creates and executes a one-time action that runs after the specified delay. |
|
Creates and executes a ScheduledFuture object that executes after a specified delay. |
|
Creates and executes a recurring action that runs first after the specified initial delay and then again after the specified period. In other words, execution will start after initialDelay, then initialDelay + period, then initialDelay + 2 * period, and so on. |
|
Creates and executes a recurring action that executes first after the specified initial delay, and then again with the specified delay between the completion of one execution and the start of the next. |
So the interface lets us run tasks at regular intervals or after some delay.
More on the newScheduledThreadPool method.
We can call it in several ways:
|
corePoolSize is the number of threads to keep in the pool, even if they are idle. |
|
corePoolSize is the number of threads to keep in the pool, even if they are idle. threadFactory is the factory to use when creating new threads. |
Both methods will create a thread pool that can schedule actions to execute after a specified delay or periodically.
Let's look at an example to see how ScheduledThreadPool works.
For example, suppose we have a task to check email every 5 seconds, but this check must not affect the main program and entails the potential consumption of additional resources.
We have a task class that simulates checking email.
public class Task implements Runnable {
@Override
public void run() {
System.out.println("Checking email...");
}
}
Next, we create a thread pool and schedule the check.
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
executorService.scheduleAtFixedRate(new Task(), 0, 5, TimeUnit.SECONDS);
In the output, every 5 seconds we see:
In general, we can use such a pool to perform periodic "housekeeping" tasks, as in the example. Housekeeping tasks are tasks that must be performed regardless of what the main program is doing.
GO TO FULL VERSION