Töiden ajoitus

Toistaiseksi esimerkeissä on esitelty yksinkertaisen työn luontia, ajoitusta ja tilannetietojen raportointia. Töiden ajoitusmenettely pystyy kuitenkin muuhunkin kuin tähän mennessä on esitetty. Prioriteettien, viiveiden ja mukautettujen ajoitusehtojen avulla voit hallita tarkemmin sitä, kuinka työ ajoitetaan.

Töiden prioriteetit

Työn prioriteetin avulla voidaan määrittää työn tärkeys suhteessa järjestelmän muihin töihin. Työn prioriteetin asetus ei vaikuta jo ajossa olevaan työhön, mutta se vaikuttaa siihen, kuinka odottava työ ajoitetaan suhteessa muihin töihin. Työn prioriteetti voi olla jokin useista ennalta määritetyistä prioriteettivakioista:

Työn oletusprioriteetti on LONG. Seuraava katkelma luo aiemmin käytetyn merkityksettömän työn, mutta määrittää sen prioriteetiksi DECORATE, mikä osoittaa, että sen prioriteetti on järjestelmän pienin:

   TrivialJob job = new TrivialJob();
   job.setPriority(Job.DECORATE);
   job.schedule();

Ajoitus viiveen avulla

Toinen keino hallita töiden ajoitusta on käyttää ajoitusviivettä. Ajoitusviiveen voi määrittää, kun työ ajoitetaan. Työtä viivytetään määritetyn millisekuntimäärän verran, ennen kuin se ajoitetaan.

   TrivialJob job = new TrivialJob();
   job.schedule(1000);  // odota sekunti ennen ajoitusta

Työn uudelleenajoitus

Sellaisen työn ajoituksella, joka on odottamassa tai lepotilassa, ei ole vaikutusta. Sen sijaan sellaisen työn ajoitus, joka on jo ajossa, ajoittaa työn uudelleen sen jälkeen, kun se on ajettu. Tämä on kätevä tapa käsitellä toistuvia töitä, kuten tausta-ajona toteutettavia kyselysilmukoita. Jos työ ajoitetaan uudelleen useita kertoja sen ollessa ajossa, se ajoitetaan uudelleen vain kerran, viimeisimmän viiveen mukaan. Seuraava katkelma määrittää työn, joka ajoittaa itsensä uudelleen ajettavaksi 10 sekuntia sen jälkeen, kun se saa nykyisen iteraation valmiiksi.

   class RepetitiveTrivialJob extends Job {
      public RepetitiveTrivialJob() {
         super("Repetitive Trivial Job");
      }
      public IStatus run(IProgressMonitor monitor) {
         System.out.println("Running the job.");
         // ajoita uudelleen 10 sekunnin jälkeen
         schedule(10000);
         return Status.OK_STATUS;
      }
   }

Mukautetut ajoitusehdot

Job-luokan lisäkäytännön avulla työ voi tarkistaa ennakkoedellytykset juuri ennen kuin se on ajoitetaan tai ajetaan. Esimerkki:

class JobWithPreconditions extends Job {
	...
	public boolean shouldSchedule() {
		return super.shouldSchedule() && checkJobPreconditions();
	}
	public boolean shouldRun() {
		return super.shouldRun() && checkJobPreconditions();
	}
	...
}

Metodi shouldSchedule kutsutaan juuri ennen kuin töiden hallintaohjelma sijoittaa työn jonoon. Tämä sallii työn peruuttavan itsensä, jos ajoituksen perusedellytykset eivät täyty. Työn on palautettava arvo false, jos sen ajoitus ei käy. Samoin shouldRun-metodi kutsutaan juuri ennen kuin töiden hallintaohjelma ajaa työn. Jos joitakin lisäehtoja on täytettävä, ennen kuin työ ajetaan, ne on tarkistettava tässä vaiheessa.