Klasa ScheduledThreadPoolExecutor

java.util.concurrent.ScheduledThreadPoolExecutor jest podklasą ThreadPoolExecutor i może dodatkowo planować uruchamianie poleceń po określonym opóźnieniu lub okresowe wykonywanie.

Metody ScheduledThreadPoolExecutor

Sr.No. Metoda i opis
1

protected <V> RunnableScheduledFuture<V> decorateTask(Callable<V> callable, RunnableScheduledFuture<V> task)

Modyfikuje lub zastępuje zadanie używane do wykonywania wywoływanego pliku.

2

protected <V> RunnableScheduledFuture<V> decorateTask(Runnable runnable, RunnableScheduledFuture<V> task)

Modyfikuje lub zastępuje zadanie używane do wykonywania pliku wykonywalnego.

3

void execute(Runnable command)

Wykonuje polecenie z zerowym wymaganym opóźnieniem.

4

boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()

Pobiera zasady dotyczące kontynuowania wykonywania istniejących zadań okresowych, nawet gdy ten moduł wykonawczy został zamknięty.

5

boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()

Pobiera zasady dotyczące wykonywania istniejących opóźnionych zadań, nawet jeśli ten moduł wykonawczy został zamknięty.

6

BlockingQueue<Runnable> getQueue()

Zwraca kolejkę zadań używaną przez ten moduł wykonawczy.

7

boolean getRemoveOnCancelPolicy()

Pobiera zasady dotyczące tego, czy anulowane zadania powinny być natychmiast usuwane z kolejki pracy w momencie anulowania.

8

<V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)

Tworzy i wykonuje ScheduledFuture, która jest włączana po określonym opóźnieniu.

9

ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)

Tworzy i wykonuje jednorazową akcję, która staje się aktywna po określonym opóźnieniu.

10

ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)

Tworzy i wykonuje okresowe działanie, które jest włączane najpierw po zadanym początkowym opóźnieniu, a następnie po zadanym okresie; to znaczy, że wykonywanie rozpocznie się po initialDelay, a następnie initialDelay + okres, a następnie initialDelay + 2 * okres i tak dalej.

11

ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)

Tworzy i wykonuje okresowe działanie, które jest włączane najpierw po zadanym początkowym opóźnieniu, a następnie z zadanym opóźnieniem między zakończeniem jednego wykonania a rozpoczęciem następnego.

12

void setContinueExistingPeriodicTasksAfterShutdownPolicy (boolean value)

Ustawia zasady dotyczące kontynuowania wykonywania istniejących zadań okresowych, nawet jeśli ten moduł wykonawczy został zamknięty.

13

void setExecuteExistingDelayedTasksAfterShutdownPolicy (boolean value)

Ustawia zasady dotyczące wykonywania istniejących opóźnionych zadań, nawet jeśli ten moduł wykonawczy został zamknięty.

14

void setRemoveOnCancelPolicy(boolean value)

Ustawia zasady dotyczące tego, czy anulowane zadania powinny być natychmiast usuwane z kolejki pracy w momencie anulowania.

15

void shutdown()

Inicjuje uporządkowane zamknięcie, w którym wykonywane są wcześniej przesłane zadania, ale żadne nowe zadania nie będą akceptowane.

16

List<Runnable> shutdownNow()

Próbuje zatrzymać wszystkie aktywnie wykonywane zadania, zatrzymuje przetwarzanie zadań oczekujących i zwraca listę zadań oczekujących na wykonanie.

17

<T> Future<T> submit(Callable<T> task)

Wysyła zadanie zwracające wartość do wykonania i zwraca Future reprezentującą oczekujące wyniki zadania.

18

Future<?> submit(Runnable task)

Wysyła zadanie do wykonania do wykonania i zwraca przyszłość reprezentującą to zadanie.

19

<T> Future<T> submit(Runnable task, T result)

Wysyła zadanie do wykonania do wykonania i zwraca przyszłość reprezentującą to zadanie.

Przykład

Poniższy program TestThread przedstawia użycie interfejsu ScheduledThreadPoolExecutor w środowisku opartym na wątkach.

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");      
      }
   }
}

Spowoduje to następujący wynik.

Wynik

beep
beep
beep
beep