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