ScheduledThreadPoolExecutor, classe

java.util.concurrent.ScheduledThreadPoolExecutor est une sous-classe de ThreadPoolExecutor et peut en outre planifier des commandes à exécuter après un délai donné ou à s'exécuter périodiquement.

Méthodes ScheduledThreadPoolExecutor

N ° Sr. Méthode et description
1

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

Modifie ou remplace la tâche utilisée pour exécuter un appelable.

2

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

Modifie ou remplace la tâche utilisée pour exécuter un exécutable.

3

void execute(Runnable command)

Exécute la commande avec zéro délai requis.

4

boolean getContinueExistingPeriodicTasksAfterShutdownPolicy()

Obtient la stratégie indiquant s'il faut continuer à exécuter les tâches périodiques existantes même lorsque cet exécuteur a été arrêté.

5

boolean getExecuteExistingDelayedTasksAfterShutdownPolicy()

Obtient la stratégie d'exécution des tâches différées existantes même lorsque cet exécuteur a été arrêté.

6

BlockingQueue<Runnable> getQueue()

Renvoie la file d'attente des tâches utilisée par cet exécuteur.

sept

boolean getRemoveOnCancelPolicy()

Obtient la stratégie indiquant si les tâches annulées doivent être immédiatement supprimées de la file d'attente de travail au moment de l'annulation.

8

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

Crée et exécute un ScheduledFuture qui devient activé après le délai donné.

9

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

Crée et exécute une action ponctuelle qui devient activée après le délai donné.

dix

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

Crée et exécute une action périodique qui devient activée d'abord après le délai initial donné, puis avec la période donnée; c'est-à-dire que les exécutions commenceront après initialDelay puis initialDelay + period, puis initialDelay + 2 * period, et ainsi de suite.

11

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

Crée et exécute une action périodique qui devient activée d'abord après le délai initial donné, puis avec le délai donné entre la fin d'une exécution et le début de la suivante.

12

void setContinueExistingPeriodicTasksAfterShutdownPolicy (boolean value)

Définit la stratégie sur la poursuite de l'exécution des tâches périodiques existantes même lorsque cet exécuteur a été arrêté.

13

void setExecuteExistingDelayedTasksAfterShutdownPolicy (boolean value)

Définit la stratégie d'exécution des tâches différées existantes même lorsque cet exécuteur a été arrêté.

14

void setRemoveOnCancelPolicy(boolean value)

Définit la stratégie selon laquelle les tâches annulées doivent être immédiatement supprimées de la file d'attente de travail au moment de l'annulation.

15

void shutdown()

Lance un arrêt ordonné dans lequel les tâches précédemment soumises sont exécutées, mais aucune nouvelle tâche ne sera acceptée.

16

List<Runnable> shutdownNow()

Tente d'arrêter toutes les tâches en cours d'exécution, interrompt le traitement des tâches en attente et renvoie une liste des tâches en attente d'exécution.

17

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

Soumet une tâche de retour de valeur pour exécution et renvoie un Future représentant les résultats en attente de la tâche.

18

Future<?> submit(Runnable task)

Soumet une tâche exécutable pour exécution et renvoie un Future représentant cette tâche.

19

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

Soumet une tâche exécutable pour exécution et renvoie un Future représentant cette tâche.

Exemple

Le programme TestThread suivant montre l'utilisation de l'interface ScheduledThreadPoolExecutor dans un environnement basé sur les threads.

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

Cela produira le résultat suivant.

Production

beep
beep
beep
beep