ScheduledThreadPoolExecutor Classe
java.util.concurrent.ScheduledThreadPoolExecutor è una sottoclasse di ThreadPoolExecutor e può inoltre pianificare l'esecuzione di comandi dopo un determinato ritardo o l'esecuzione periodica.
Metodi ScheduledThreadPoolExecutor
| Sr.No. | Metodo e descrizione | 
|---|---|
| 1 | protected <V> RunnableScheduledFuture<V> decorateTask(Callable<V> callable, RunnableScheduledFuture<V> task) Modifica o sostituisce l'attività utilizzata per eseguire un richiamabile.  |  
      
| 2 | protected <V> RunnableScheduledFuture<V> decorateTask(Runnable runnable, RunnableScheduledFuture<V> task) Modifica o sostituisce l'attività utilizzata per eseguire un eseguibile.  |  
      
| 3 | void execute(Runnable command) Esegue il comando con zero ritardo richiesto.  |  
      
| 4 | boolean getContinueExistingPeriodicTasksAfterShutdownPolicy() Ottiene il criterio se continuare a eseguire attività periodiche esistenti anche quando questo esecutore è stato arrestato.  |  
      
| 5 | boolean getExecuteExistingDelayedTasksAfterShutdownPolicy() Ottiene il criterio se eseguire le attività ritardate esistenti anche quando questo esecutore è stato arrestato.  |  
      
| 6 | BlockingQueue<Runnable> getQueue() Restituisce la coda delle attività utilizzata da questo esecutore.  |  
      
| 7 | boolean getRemoveOnCancelPolicy() Ottiene il criterio per stabilire se le attività annullate devono essere rimosse immediatamente dalla coda di lavoro al momento dell'annullamento.  |  
      
| 8 | <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit) Crea ed esegue un ScheduledFuture che viene abilitato dopo il ritardo specificato.  |  
      
| 9 | ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit) Crea ed esegue un'azione one-shot che viene abilitata dopo il ritardo specificato.  |  
      
| 10 | ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) Crea ed esegue un'azione periodica che viene abilitata prima dopo il dato ritardo iniziale e successivamente con il dato periodo; cioè le esecuzioni inizieranno dopo initialDelay, quindi initialDelay + period, quindi initialDelay + 2 * period e così via.  |  
      
| 11 | ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) Crea ed esegue un'azione periodica che viene abilitata prima dopo il ritardo iniziale dato, e successivamente con il ritardo dato tra la fine di un'esecuzione e l'inizio della successiva.  |  
      
| 12 | void setContinueExistingPeriodicTasksAfterShutdownPolicy (boolean value) Imposta il criterio se continuare a eseguire attività periodiche esistenti anche quando questo esecutore è stato arrestato.  |  
      
| 13 | void setExecuteExistingDelayedTasksAfterShutdownPolicy (boolean value) Imposta la politica sull'esecuzione delle attività ritardate esistenti anche quando questo esecutore è stato arrestato.  |  
      
| 14 | void setRemoveOnCancelPolicy(boolean value) Imposta il criterio se le attività annullate devono essere rimosse immediatamente dalla coda di lavoro al momento dell'annullamento.  |  
      
| 15 | void shutdown() Avvia un arresto ordinato in cui vengono eseguite le attività inoltrate in precedenza, ma non verranno accettate nuove attività.  |  
      
| 16 | List<Runnable> shutdownNow() Tenta di interrompere tutte le attività in esecuzione attiva, interrompe l'elaborazione delle attività in attesa e restituisce un elenco delle attività in attesa di esecuzione.  |  
      
| 17 | <T> Future<T> submit(Callable<T> task) Invia un'attività di restituzione del valore per l'esecuzione e restituisce un Future che rappresenta i risultati in sospeso dell'attività.  |  
      
| 18 | Future<?> submit(Runnable task) Invia un'attività eseguibile per l'esecuzione e restituisce un Future che rappresenta tale attività.  |  
      
| 19 | <T> Future<T> submit(Runnable task, T result) Invia un'attività eseguibile per l'esecuzione e restituisce un Future che rappresenta tale attività.  |  
      
Esempio
Il seguente programma TestThread mostra l'utilizzo dell'interfaccia ScheduledThreadPoolExecutor in un ambiente basato su thread.
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");      
      }
   }
} 
    Questo produrrà il seguente risultato.
Produzione
beep
beep
beep
beep