Un alt tip de grup de activități este grupul de activități programate. Judecând după nume, putem presupune că folosim acest tip pentru a programa când trebuie lansată o anumită sarcină.
Acest tip de serviciu este util atunci când avem o sarcină pentru a lansa o activitate după ce a trecut ceva timp sau dorim să programăm o sarcină recurentă.
Pentru a folosi unul, numim Executors.newScheduledThreadPool(1) .
Vom vorbi despre parametri puțin mai târziu. Dar deocamdată, ceea ce trebuie să știm este că atunci când această metodă este apelată obținem un obiect ScheduledExecutorService .
ScheduledExecutorService este o interfață care extinde ExecutorService .
În această interfață apar următoarele metode:
Metodă | Explicaţie |
---|---|
|
Creează și execută o acțiune unică care rulează după întârzierea specificată. |
|
Creează și execută aScheduledFutureobiect care se execută după o întârziere specificată. |
|
Creează și execută o acțiune recurentă care rulează mai întâi după întârzierea inițială specificată și apoi din nou după perioada specificată. Cu alte cuvinte, execuția va începe după initialDelay , apoi initialDelay + period , apoi initialDelay + 2 * period și așa mai departe. |
|
Creează și execută o acțiune recurentă care se execută mai întâi după întârzierea inițială specificată și apoi din nou cu întârzierea specificată între finalizarea unei execuții și începerea următoarei. |
Deci, interfața ne permite să executăm sarcini la intervale regulate sau după o anumită întârziere.
Mai multe despre metoda newScheduledThreadPool.
Îl putem numi în mai multe moduri:
|
corePoolSize este numărul de fire care trebuie păstrate în pool, chiar dacă acestea sunt inactive. |
|
corePoolSize este numărul de fire care trebuie păstrate în pool, chiar dacă acestea sunt inactive. threadFactory este fabrica de utilizat atunci când se creează fire noi. |
Ambele metode vor crea un pool de fire care poate programa acțiuni pentru a fi executate după o întârziere specificată sau periodic.
Să ne uităm la un exemplu pentru a vedea cum funcționează ScheduledThreadPool .
De exemplu, să presupunem că avem o sarcină de a verifica e-mailul la fiecare 5 secunde, dar această verificare nu trebuie să afecteze programul principal și implică consumul potențial de resurse suplimentare.
Avem o clasă de activități care simulează verificarea e-mailului.
public class Task implements Runnable {
@Override
public void run() {
System.out.println("Checking email...");
}
}
Apoi, creăm un pool de fire și programăm verificarea.
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
executorService.scheduleAtFixedRate(new Task(), 0, 5, TimeUnit.SECONDS);
În ieșire, la fiecare 5 secunde vedem:
În general, putem folosi un astfel de bazin pentru a efectua sarcini periodice de „menaj”, ca în exemplu. Sarcinile de menaj sunt sarcini care trebuie efectuate indiferent de ceea ce face programul principal.
GO TO FULL VERSION