ScheduledThreadPoolExecutor - класс
java.util.concurrent.ScheduledThreadPoolExecutor является подклассом ThreadPoolExecutor и может дополнительно планировать выполнение команд после заданной задержки или периодическое выполнение.
ScheduledThreadPoolExecutor Методы
Sr. No. | Метод и описание |
---|---|
1 | protected <V> RunnableScheduledFuture<V> decorateTask(Callable<V> callable, RunnableScheduledFuture<V> task) Изменяет или заменяет задачу, используемую для выполнения вызываемого объекта. |
2 | protected <V> RunnableScheduledFuture<V> decorateTask(Runnable runnable, RunnableScheduledFuture<V> task) Изменяет или заменяет задачу, используемую для выполнения исполняемого файла. |
3 | void execute(Runnable command) Выполняет команду с нулевой необходимой задержкой. |
4 | boolean getContinueExistingPeriodicTasksAfterShutdownPolicy() Получает политику о том, следует ли продолжать выполнение существующих периодических задач, даже если этот исполнитель был отключен. |
5 | boolean getExecuteExistingDelayedTasksAfterShutdownPolicy() Получает политику о том, следует ли выполнять существующие отложенные задачи, даже если этот исполнитель был отключен. |
6 | BlockingQueue<Runnable> getQueue() Возвращает очередь задач, используемую этим исполнителем. |
7 | boolean getRemoveOnCancelPolicy() Получает политику, определяющую, должны ли отмененные задачи немедленно удаляться из рабочей очереди во время отмены. |
8 | <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit) Создает и выполняет ScheduledFuture, который становится включенным после заданной задержки. |
9 | ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit) Создает и выполняет одноразовое действие, которое становится доступным после заданной задержки. |
10 | ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) Создает и выполняет периодическое действие, которое активируется сначала после заданной начальной задержки, а затем с заданным периодом; то есть выполнение начнется после initialDelay, затем initialDelay + period, затем initialDelay + 2 * period и так далее. |
11 | ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) Создает и выполняет периодическое действие, которое активируется первым после заданной начальной задержки, а затем с заданной задержкой между завершением одного выполнения и началом следующего. |
12 | void setContinueExistingPeriodicTasksAfterShutdownPolicy (boolean value) Устанавливает политику в отношении продолжения выполнения существующих периодических задач, даже если этот исполнитель был выключен. |
13 | void setExecuteExistingDelayedTasksAfterShutdownPolicy (boolean value) Устанавливает политику в отношении выполнения существующих отложенных задач, даже если этот исполнитель был выключен. |
14 | void setRemoveOnCancelPolicy(boolean value) Устанавливает политику, определяющую, должны ли отмененные задачи немедленно удаляться из рабочей очереди во время отмены. |
15 | void shutdown() Инициирует упорядоченное завершение работы, при котором ранее отправленные задачи выполняются, но новые задачи не принимаются. |
16 | List<Runnable> shutdownNow() Пытается остановить все активно выполняющиеся задачи, останавливает обработку ожидающих задач и возвращает список задач, ожидающих выполнения. |
17 | <T> Future<T> submit(Callable<T> task) Отправляет на выполнение задачу, возвращающую значение, и возвращает Future, представляющий ожидающие результаты задачи. |
18 | Future<?> submit(Runnable task) Отправляет на выполнение задачу Runnable и возвращает Future, представляющую эту задачу. |
19 | <T> Future<T> submit(Runnable task, T result) Отправляет на выполнение задачу Runnable и возвращает Future, представляющую эту задачу. |
пример
Следующая программа TestThread показывает использование интерфейса ScheduledThreadPoolExecutor в среде на основе потоков.
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
public class TestThread {
public static void main(final String[] arguments) throws InterruptedException {
final ScheduledThreadPoolExecutor scheduler =
(ScheduledThreadPoolExecutor)Executors.newScheduledThreadPool(1);
final ScheduledFuture<?> beepHandler =
scheduler.scheduleAtFixedRate(new BeepTask(), 2, 2, TimeUnit.SECONDS);
scheduler.schedule(new Runnable() {
@Override
public void run() {
beepHandler.cancel(true);
scheduler.shutdown();
}
}, 10, TimeUnit.SECONDS);
}
static class BeepTask implements Runnable {
public void run() {
System.out.println("beep");
}
}
}
Это даст следующий результат.
Вывод
beep
beep
beep
beep