A példák eddig egy egyszerű feladatlétrehozást, ütemezést és előrehaladás-jelentéskészítést mutattak be. A feladatütemezési mechanizmus hatékonyabb, mint ahogy eddig bemutattuk. Prioritások, késleltetések és egyéni ütemezési helyzetek segítségével még finomabban szabályozható a feladat ütemezése.
A feladatprioritás segítségével kialakítható a feladat a rendszer más feladathoz viszonyított fontossága. A feladat prioritásának beállítása nincs hatással a már futó feladatra, de arra igen, hogy a várakozó feladat hogyan lesz ütemezve más feladatokhoz képest. A feladat prioritása a számos előre meghatározott prioritáskonstans egyike lehet:
A feladat alapértelmezett prioritása LONG. Az alábbi részlet létrehozza a korábban használt szokásos feladatot, de DECORATE értékre állítja a prioritást annak jelzése érdekében, hogy ez a legalacsonyabb szintű priorisát:
TrivialJob job = new TrivialJob(); job.setPriority(Job.DECORATE); job.schedule();
Másik eljárás a feladat ütemezésének szabályozására az ütemezési késleltetés használata. Az ütemezési késleltetés megadható a feladat ütemezésekor. A feladat ütemezés előtt a megadott ezredmásodpercig késleltetésre kerül.
TrivialJob job = new TrivialJob(); job.schedule(1000); // egy másodpercet vár ütemezés előtt
A várakozó vagy alvó feladat ütemezésére nincs hatással. A már futó feladat ütemezése a feladat befejezése után újraütemezésre kerül. Ez megfelelő mechanizmus az ismétlődő feladatokhoz, mint például a háttér lekérdezési ciklusok. Ha a feladat futás közben többször is újraütemezésre kerül, akkor csak egyszer kerül újraütemezésre a legkésőbbi megadott késleltetéssel. Az alábbi részlet megad egy feladatot, amely újraütemezi magát, hogy 10 másodpercenként fusson az aktuális iteráció befejezése után.
class RepetitiveTrivialJob extends Job { public RepetitiveTrivialJob() { super("Repetitive Trivial Job"); } public IStatus run(IProgressMonitor monitor) { System.out.println("Running the job."); // újraütemezi 10 másodperc múlva schedule(10000); return Status.OK_STATUS; } }
A Job osztály kiegészítő protokollja segítségével a feladat ütemezése vagy futása előtt ellenőrizheti az előfeltételeket. Ezt legjobban az alábbi példa szemlélteti:
class JobWithPreconditions extends Job { ... public boolean shouldSchedule() { return super.shouldSchedule() && checkJobPreconditions(); } public boolean shouldRun() { return super.shouldRun() && checkJobPreconditions(); } ... }
A shouldSchedule metódus azelőtt kerül meghívásra, hogy a feladatkezelő berakná a feladatot a sorba. Ennek segítségével a feladat törli magát, ha az ütemezés előfeltételeinek nem felel meg. A feladatnak false értéket kell visszaadni, ha nem megfelelő az ütemezéshez. Hasonlóan, a shouldRun metódus azelőtt kerül meghívásra, hogy a feladatkezelő futtatná a feladatot. Eddigre a további feltételeket is ellenőrizni kell, amelyeket a feladat futása előtt ki kell elégíteni.