ScheduledExecutorService-Schnittstelle
Eine java.util.concurrent.ScheduledExecutorService-Schnittstelle ist eine Unterschnittstelle der ExecutorService-Schnittstelle und unterstützt die zukünftige und / oder regelmäßige Ausführung von Aufgaben.
ScheduledExecutorService-Methoden
Sr.Nr. | Methode & Beschreibung |
---|---|
1 | <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. |
2 | 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. |
3 | 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. |
4 | 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. |
Beispiel
Das folgende TestThread-Programm zeigt die Verwendung der ScheduledExecutorService-Schnittstelle in einer threadbasierten Umgebung.
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
public class TestThread {
public static void main(final String[] arguments) throws InterruptedException {
final ScheduledExecutorService scheduler = 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