A feladatkészlet másik típusa az ütemezett feladatkészlet. A név alapján feltételezhetjük, hogy ezt a típust használjuk arra, hogy ütemezzük, mikor kell egy adott feladatot elindítani.
Ez a fajta szolgáltatás akkor hasznos, ha olyan feladatunk van, hogy bizonyos idő elteltével elindítsunk egy tevékenységet, vagy ismétlődő feladatot szeretnénk ütemezni.
Az egyik használatához az Executors.newScheduledThreadPool(1) nevet hívjuk .
A paraméterekről kicsit később beszélünk. De egyelőre tudnunk kell, hogy a metódus meghívásakor egy ScheduledExecutorService objektumot kapunk.
A ScheduledExecutorService egy interfész, amely kiterjeszti az ExecutorService szolgáltatást .
A következő módszerek jelennek meg ezen a felületen:
Módszer | Magyarázat |
---|---|
|
Létrehoz és végrehajt egy egyszeri műveletet, amely a megadott késleltetés után fut le. |
|
Létrehozza és végrehajtja aScheduledFutureobjektum, amely meghatározott késleltetés után fut le. |
|
Létrehoz és végrehajt egy ismétlődő műveletet, amely először a megadott kezdeti késleltetés után fut le, majd ismét a megadott időszak után. Más szavakkal, a végrehajtás a kezdetiDelay , majd az inicialDelay + periódus , majd az inicialDelay + 2 * periódus után kezdődik , és így tovább. |
|
Létrehoz és végrehajt egy ismétlődő műveletet, amely először a megadott kezdeti késleltetés után, majd az egyik végrehajtás befejezése és a következő kezdete közötti meghatározott késleltetéssel hajtódik végre. |
Így a felület lehetővé teszi, hogy rendszeres időközönként vagy némi késleltetés után feladatokat hajtsunk végre.
További információ a newScheduledThreadPool módszerről.
Többféleképpen nevezhetjük:
|
A corePoolSize a készletben tartandó szálak száma, még akkor is, ha tétlenek. |
|
A corePoolSize a készletben tartandó szálak száma, még akkor is, ha tétlenek. A threadFactory az új szálak létrehozásakor használt gyári alap. |
Mindkét módszer létrehoz egy szálkészletet, amely ütemezheti a műveletek meghatározott késleltetés utáni vagy időszakos végrehajtását.
Nézzünk egy példát a ScheduledThreadPool működésére.
Tegyük fel például, hogy van egy feladatunk, hogy 5 másodpercenként ellenőrizzük az e-maileket, de ez az ellenőrzés nem érintheti a fő programot, és további erőforrások esetleges felhasználásával jár.
Van egy feladatosztályunk, amely szimulálja az e-mailek ellenőrzését.
public class Task implements Runnable {
@Override
public void run() {
System.out.println("Checking email...");
}
}
Ezután létrehozunk egy szálkészletet, és ütemezzük az ellenőrzést.
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
executorService.scheduleAtFixedRate(new Task(), 0, 5, TimeUnit.SECONDS);
A kimenetben 5 másodpercenként ezt látjuk:
Általában egy ilyen medencét használhatunk időszakos "háztartási" feladatok elvégzésére, mint a példában. A háztartási feladatok olyan feladatok, amelyeket el kell végezni, függetlenül attól, hogy a fő program mit csinál.
GO TO FULL VERSION