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