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