Java Language Pianificazione delle attività da eseguire a un'ora fissa, dopo un ritardo o ripetutamente


Esempio

La classe ScheduledExecutorService fornisce metodi per pianificare attività singole o ripetute in diversi modi. Il seguente esempio di codice presuppone che il pool sia stato dichiarato e inizializzato come segue:

ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);

Oltre ai normali metodi ExecutorService , l'API ScheduledExecutorService aggiunge 4 metodi che pianificano le attività e restituiscono oggetti ScheduledFuture . Quest'ultimo può essere utilizzato per recuperare i risultati (in alcuni casi) e annullare le attività.

Avvio di un'attività dopo un ritardo fisso

L'esempio seguente pianifica l'avvio di un'attività dopo dieci minuti.

ScheduledFuture<Integer> future = pool.schedule(new Callable<>() {
        @Override public Integer call() {
            // do something
            return 42;
        }
    }, 
    10, TimeUnit.MINUTES);

Avvio di attività a una velocità fissa

L'esempio seguente pianifica l'avvio di un'attività dopo dieci minuti, quindi ripetutamente a una velocità di una volta ogni minuto.

ScheduledFuture<?> future = pool.scheduleAtFixedRate(new Runnable() {
        @Override public void run() {
            // do something
        }
    }, 
    10, 1, TimeUnit.MINUTES);

L'esecuzione delle attività continuerà in base alla pianificazione fino a quando il pool verrà arrestato, il future verrà annullato o una delle attività riscontra un'eccezione.

È garantito che le attività pianificate da una determinata chiamata scheduledAtFixedRate non si sovrappongano nel tempo. Se un'attività richiede più tempo del periodo prescritto, la successiva e successiva esecuzione delle attività potrebbe iniziare in ritardo.

Avvio di attività con un ritardo fisso

L'esempio seguente pianifica l'avvio di un'attività dopo dieci minuti, quindi ripetutamente con un ritardo di un minuto tra la fine di un'attività e la successiva.

ScheduledFuture<?> future = pool.scheduleWithFixedDelay(new Runnable() {
        @Override public void run() {
            // do something
        }
    }, 
    10, 1, TimeUnit.MINUTES);

L'esecuzione delle attività continuerà in base alla pianificazione fino a quando il pool verrà arrestato, il future verrà annullato o una delle attività riscontra un'eccezione.