Feladatütemezés

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.

Feladatprioritások

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();

Ütemezés késleltetéssel

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 feladat újraütemezése

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;
      }
   }

Egyéni ütemezési feltételek

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.