Classe ScheduledThreadPoolExecutor
java.util.concurrent.ScheduledThreadPoolExecutor é uma subclasse de ThreadPoolExecutor e pode, adicionalmente, agendar comandos para serem executados após um determinado atraso ou periodicamente.
Métodos ScheduledThreadPoolExecutor
Sr. Não. | Método e Descrição |
---|---|
1 | protected <V> RunnableScheduledFuture<V> decorateTask(Callable<V> callable, RunnableScheduledFuture<V> task) Modifica ou substitui a tarefa usada para executar um chamável. |
2 | protected <V> RunnableScheduledFuture<V> decorateTask(Runnable runnable, RunnableScheduledFuture<V> task) Modifica ou substitui a tarefa usada para executar um executável. |
3 | void execute(Runnable command) Executa o comando com zero de atraso necessário. |
4 | boolean getContinueExistingPeriodicTasksAfterShutdownPolicy() Obtém a política de continuar executando as tarefas periódicas existentes, mesmo quando o executor foi desligado. |
5 | boolean getExecuteExistingDelayedTasksAfterShutdownPolicy() Obtém a política de execução de tarefas atrasadas existentes, mesmo quando o executor foi desligado. |
6 | BlockingQueue<Runnable> getQueue() Retorna a fila de tarefas usada por este executor. |
7 | boolean getRemoveOnCancelPolicy() Obtém a política sobre se as tarefas canceladas devem ser removidas imediatamente da fila de trabalho no momento do cancelamento. |
8 | <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit) Cria e executa um ScheduledFuture que é ativado após um determinado atraso. |
9 | ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit) Cria e executa uma ação instantânea que é ativada após um determinado atraso. |
10 | ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) Cria e executa uma ação periódica que é habilitada primeiro após o atraso inicial fornecido e, subsequentemente, com o período determinado; isto é, as execuções começarão após initialDelay, initialDelay + período, initialDelay + 2 * período e assim por diante. |
11 | ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) Cria e executa uma ação periódica que é habilitada primeiro após o atraso inicial fornecido e, subsequentemente, com o atraso fornecido entre o término de uma execução e o início da próxima. |
12 | void setContinueExistingPeriodicTasksAfterShutdownPolicy (boolean value) Define a política de continuar ou não a execução das tarefas periódicas existentes, mesmo quando este executor foi desligado. |
13 | void setExecuteExistingDelayedTasksAfterShutdownPolicy (boolean value) Define a política de execução de tarefas atrasadas existentes, mesmo quando este executor foi desligado. |
14 | void setRemoveOnCancelPolicy(boolean value) Define a política se as tarefas canceladas devem ser removidas imediatamente da fila de trabalho no momento do cancelamento. |
15 | void shutdown() Inicia um desligamento ordenado no qual as tarefas enviadas anteriormente são executadas, mas nenhuma tarefa nova será aceita. |
16 | List<Runnable> shutdownNow() Tenta interromper todas as tarefas em execução ativa, interrompe o processamento das tarefas em espera e retorna uma lista das tarefas que estavam aguardando execução. |
17 | <T> Future<T> submit(Callable<T> task) Envia uma tarefa de retorno de valor para execução e retorna um Future que representa os resultados pendentes da tarefa. |
18 | Future<?> submit(Runnable task) Envia uma tarefa Executável para execução e retorna um Future que representa essa tarefa. |
19 | <T> Future<T> submit(Runnable task, T result) Envia uma tarefa Executável para execução e retorna um Future que representa essa tarefa. |
Exemplo
O seguinte programa TestThread mostra o uso da interface ScheduledThreadPoolExecutor em ambiente baseado em 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");
}
}
}
Isso produzirá o seguinte resultado.
Resultado
beep
beep
beep
beep