ScheduledThreadPoolExecutor-Klasse
java.util.concurrent.ScheduledThreadPoolExecutor ist eine Unterklasse von ThreadPoolExecutor und kann zusätzlich Befehle planen, die nach einer bestimmten Verzögerung ausgeführt oder regelmäßig ausgeführt werden.
ScheduledThreadPoolExecutor-Methoden
Sr.Nr. | Methode & Beschreibung |
---|---|
1 | protected <V> RunnableScheduledFuture<V> decorateTask(Callable<V> callable, RunnableScheduledFuture<V> task) Ändert oder ersetzt die Aufgabe, die zum Ausführen eines aufrufbaren Objekts verwendet wird. |
2 | protected <V> RunnableScheduledFuture<V> decorateTask(Runnable runnable, RunnableScheduledFuture<V> task) Ändert oder ersetzt die Aufgabe, die zum Ausführen einer ausführbaren Datei verwendet wird. |
3 | void execute(Runnable command) Führt den Befehl ohne Verzögerung aus. |
4 | boolean getContinueExistingPeriodicTasksAfterShutdownPolicy() Ruft die Richtlinie ab, ob vorhandene periodische Aufgaben auch dann ausgeführt werden sollen, wenn dieser Executor heruntergefahren wurde. |
5 | boolean getExecuteExistingDelayedTasksAfterShutdownPolicy() Ruft die Richtlinie ab, ob vorhandene verzögerte Aufgaben ausgeführt werden sollen, auch wenn dieser Executor heruntergefahren wurde. |
6 | BlockingQueue<Runnable> getQueue() Gibt die von diesem Executor verwendete Taskwarteschlange zurück. |
7 | boolean getRemoveOnCancelPolicy() Ruft die Richtlinie ab, ob abgebrochene Aufgaben zum Zeitpunkt der Stornierung sofort aus der Arbeitswarteschlange entfernt werden sollen. |
8 | <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit) Erstellt eine ScheduledFuture und führt sie aus, die nach der angegebenen Verzögerung aktiviert wird. |
9 | ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit) Erstellt eine einmalige Aktion und führt sie aus, die nach der angegebenen Verzögerung aktiviert wird. |
10 | ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) Erstellt eine periodische Aktion und führt sie aus, die zuerst nach der angegebenen anfänglichen Verzögerung und anschließend mit der angegebenen Periode aktiviert wird. Das heißt, die Ausführung beginnt nach initialDelay, dann initialDelay + period, dann initialDelay + 2 * period und so weiter. |
11 | ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) Erstellt eine periodische Aktion und führt sie aus, die zuerst nach der angegebenen anfänglichen Verzögerung und anschließend mit der angegebenen Verzögerung zwischen der Beendigung einer Ausführung und dem Beginn der nächsten aktiviert wird. |
12 | void setContinueExistingPeriodicTasksAfterShutdownPolicy (boolean value) Legt die Richtlinie fest, ob vorhandene periodische Aufgaben auch dann fortgesetzt werden sollen, wenn dieser Executor heruntergefahren wurde. |
13 | void setExecuteExistingDelayedTasksAfterShutdownPolicy (boolean value) Legt die Richtlinie fest, ob vorhandene verzögerte Aufgaben ausgeführt werden sollen, auch wenn dieser Executor heruntergefahren wurde. |
14 | void setRemoveOnCancelPolicy(boolean value) Legt die Richtlinie fest, ob abgebrochene Aufgaben zum Zeitpunkt der Stornierung sofort aus der Arbeitswarteschlange entfernt werden sollen. |
15 | void shutdown() Initiiert ein ordnungsgemäßes Herunterfahren, bei dem zuvor übermittelte Aufgaben ausgeführt werden, aber keine neuen Aufgaben akzeptiert werden. |
16 | List<Runnable> shutdownNow() Es wird versucht, alle aktiv ausgeführten Aufgaben zu stoppen, die Verarbeitung wartender Aufgaben anzuhalten und eine Liste der Aufgaben zurückzugeben, die auf die Ausführung gewartet haben. |
17 | <T> Future<T> submit(Callable<T> task) Sendet eine wertrückgebende Aufgabe zur Ausführung und gibt eine Zukunft zurück, die die ausstehenden Ergebnisse der Aufgabe darstellt. |
18 | Future<?> submit(Runnable task) Sendet eine ausführbare Aufgabe zur Ausführung und gibt eine Zukunft zurück, die diese Aufgabe darstellt. |
19 | <T> Future<T> submit(Runnable task, T result) Sendet eine ausführbare Aufgabe zur Ausführung und gibt eine Zukunft zurück, die diese Aufgabe darstellt. |
Beispiel
Das folgende TestThread-Programm zeigt die Verwendung der ScheduledThreadPoolExecutor-Schnittstelle in einer threadbasierten Umgebung.
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");
}
}
}
Dies führt zu folgendem Ergebnis.
Ausgabe
beep
beep
beep
beep