Un altro tipo di pool di attività è il pool di attività pianificate. A giudicare dal nome, possiamo presumere che usiamo questo tipo per programmare quando una particolare attività dovrebbe essere avviata.
Questo tipo di servizio è utile quando abbiamo un'attività per avviare un'attività dopo che è trascorso del tempo o vogliamo programmare un'attività ricorrente.
Per usarne uno, chiamiamo Executors.newScheduledThreadPool(1) .
Parleremo dei parametri un po 'più tardi. Ma per ora, quello che dobbiamo sapere è che quando viene chiamato questo metodo otteniamo un oggetto ScheduledExecutorService .
ScheduledExecutorService è un'interfaccia che estende ExecutorService .
In questa interfaccia vengono visualizzati i seguenti metodi:
Metodo | Spiegazione |
---|---|
|
Crea ed esegue un'azione una tantum che viene eseguita dopo il ritardo specificato. |
|
Crea ed esegue aProgrammato Futurooggetto che viene eseguito dopo un ritardo specificato. |
|
Crea ed esegue un'azione ricorrente che viene eseguita prima dopo il ritardo iniziale specificato e quindi di nuovo dopo il periodo specificato. In altre parole, l'esecuzione inizierà dopo initialDelay , quindi initialDelay + period , quindi initialDelay + 2 * period e così via. |
|
Crea ed esegue un'azione ricorrente che viene eseguita prima dopo il ritardo iniziale specificato e quindi di nuovo con il ritardo specificato tra il completamento di un'esecuzione e l'inizio della successiva. |
Quindi l'interfaccia ci consente di eseguire attività a intervalli regolari o dopo un certo ritardo.
Ulteriori informazioni sul metodo newScheduledThreadPool.
Possiamo chiamarlo in diversi modi:
|
corePoolSize è il numero di thread da mantenere nel pool, anche se sono inattivi. |
|
corePoolSize è il numero di thread da mantenere nel pool, anche se sono inattivi. threadFactory è la factory da utilizzare durante la creazione di nuovi thread. |
Entrambi i metodi creeranno un pool di thread che può pianificare azioni da eseguire dopo un ritardo specificato o periodicamente.
Diamo un'occhiata a un esempio per vedere come funziona ScheduledThreadPool .
Supponiamo ad esempio di avere un compito di controllare la posta elettronica ogni 5 secondi, ma questo controllo non deve influire sul programma principale e comporta il potenziale consumo di risorse aggiuntive.
Abbiamo una classe di attività che simula il controllo della posta elettronica.
public class Task implements Runnable {
@Override
public void run() {
System.out.println("Checking email...");
}
}
Successivamente, creiamo un pool di thread e pianifichiamo il controllo.
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
executorService.scheduleAtFixedRate(new Task(), 0, 5, TimeUnit.SECONDS);
Nell'output, ogni 5 secondi vediamo:
In generale, possiamo utilizzare un tale pool per eseguire periodiche attività di "pulizia", come nell'esempio. Le attività di pulizia sono attività che devono essere eseguite indipendentemente da ciò che sta facendo il programma principale.
GO TO FULL VERSION