Paŝoj krei ripetiĝanta taskojn en Java

Scheduling Tasks in Java

Enhorariganta Taskojn en Java

Superrigardo: En ĉi tiu dokumento, Ni diskutos pri enhorariganta taskojn en java apliko. Estas malsamaj vojoj efektivigi ripetiĝanta taskojn kaj nin diskutos kelkaj de ili ĉi tie. Java provizas diversaj APIs efektivigi ripetiĝanta taskojn kaj nin efektivigos tiujn en nia diskuto.







Enkonduko:

En kelkaj Java aplikoj ni devas kuri certajn programojn ĉe regulaj intertempoj. Ofta ekzemplo de tio ĉi estas produktanta raportojn periodically. Java provizas la ĉefaĵon enhorarigi tiajn taskojn kiel por la postulo.

Minutatoro estas grava ero en java enhorarigi taskajn/laborpostenojn por unu fojo kaj ankaŭ ripeta ekzekuto. Minutatora ilo estas ankaŭ uzita en movebla evoluado kaj la funkcio estas simila al tio de java apliko. Estas alia ilo sciita kiel Rememorigilo en java kaj ĝi estas ankaŭ uzita ĝenerale kune kun Minutatora klaso. Do la du klasa Minutatoro kaj TimerTask estas la ĉefaj eroj en Minutatora API. Java apliko uzas ambaŭ de ili efektivigi diversajn funkciojn. Sed ni devas kompreni la funkcion de Minutatoro kaj TimerTask aparte. La TimerTask estas la reala taska/laborposteno esti efektivigita kaj la Minutatoro estas iu speco de helper kiu efektive efektivigas ĝin. TimerTask estas ankaŭ ligita kun java fadeno. Ĝi efektivigas Runnable fasado kaj superregas kurita metodon elfari specifajn taskojn. Do la du klasoj estas ĉe la koro de laŭplana ripetiĝanta taskan efektivigon en java.

Lasi nin konsideri la sekvantan kodan ereton:

Enlistiganta 1: Ekzempla minutatora ekzemplo

[Kodo]

Pako Com.Hejme.Minutatoro ;

Importaĵo Java.Util.Minutatoro ;

Importaĵo Java.Util.TimerTask ;

Publika Klaso MyTimer Etendas TimerTask {

Minutatora minutatoro ;

Int Kalkulo = 0 ;

Publika MyTimer () {

}

Publika MyTimer ( Minutatora minutatoro ) {

Tio ĉi.Minutatora = minutatoro ;

}

Publika Malplena ToDo() {

Sistemo.Ekstere.Println( ” Kalkulo-> ” + (Kalkulo ) + ” : Hala Mondo ! Tio ĉi estas java scheduler ” );

}

@Superregi

Publika Malplena Kurita () {

ToDo () ;

Se (Kalkulo > 10) {// Tio ĉi estas la kondiĉo kiam vi deziras halti la

// Tasko.

Minutatoro.Nuligas () ;

}

}

}

Pako Com.Hejme.Minutatoro ;

Importaĵo Java.Util.Minutatoro ;

Publika Klaso MyScheduler {

Publika Senmova Malplena Ĉefa( Ŝnuro [] Args ) {

Minutatora minutatoro = Nova Minutatoro() ;

MyTimer myTask = Nova MyTimer ( Minutatoro ) ;

Int FirstSart = 1000 ; // Ĝi signifas poste 1 Due.

Int Periodo = 1000*2 ; //Post kiam la tasko ripetos;

Minutatoro.Horaro(MyTask, FirstSart, Periodo) ;//La tempo specifita en millisecond.

}

}

[/Kodo]

En la supra ekzemplo kiel ni vidas ke la klaso MyTimer etendas la java.Util.TimerTask klaso kiu havas abstraktan metodan kuron. Tio ĉi kurita bezonojn esti efektivigita en nia klaso. Krom tio ĉi ni havas metodon toDo kiu efektive faras la taskon. En la kura metodo ni havas kondiĉon ke se la kalkulaj atingoj 10 La programo efektivigos por la lasta tempo kaj tiam haltigo. La java tasko scheduler povas esti uzita enhorarigi taskojn de la sekvantaj tipoj:

  • Unu pafa tasko
  • Ripetiĝanta taskojn

Ĉefaĵoj de Minutatoro kaj TimerTask klasoj:

  • Minutatora tasko povas uzi ĝia nuligi metodon nuligi ĉiuj laŭplanaj taskoj
  • Minutatoro ankaŭ povas esti uzita kuri kiel dajmona fadeno
  • Minutatora tasko povas esti enhorarigita komenci ĉe fiksa intertempo
  • Ĝi povas esti uzita kuri en fono por estonta ekzekuto
  • Taskoj povas esti formita kuri kiel ununura aŭ ripetiĝanta ekzekuton
  • TimerTask estas fadena prizorganto kaj ĝi estas uzita registri taskojn kun minutatoro









Enhorariganta Unu Pafan taskon:

Lasi nin konsideri la sekvantan kodan ereton:

Enlistiganta 2: Unu pafis scheduler

[Kodo]

Pako Com.Hejme.Minutatoro ;

Importaĵo Java.Awt.Toolkit ;

Importaĵo Java.Util.Minutatoro ;

Importaĵo Java.Util.TimerTask ;

Publika Klaso RiceTimer {

Privata Fina Minutatora minutatoro = Nova Minutatoro () ;

Privata Fina Int Minutoj ;

Publika RiceTimer( Int Minutoj ) {

Tio ĉi.Minutaj = minutoj ;

}

Publika Malplena Komenco() {

Minutatoro.Horaro(Nova TimerTask() {

Publika Malplena Kurita () {

PlaySound () ;

Minutatoro.Nuligas () ;

}

Privata Malplena PlaySound() {

Sistemo.Ekstere.Println ( ” Via rizo estas preta! ” );

Toolkit.GetDefaultToolkit().Bipo() ;

}

}, Minutoj * 60 * 1000);

}

Publika Senmova Malplena Ĉefa( Ŝnuro[] Args ) {

RiceTimer riceTimer = Nova RiceTimer (20) ;

RiceTimer.Komenco () ;

}

}

[/Kodo]

En la kodo lasis nin supozas ke ĝi prenas 20 Minutoj por rizo akiri bolita. En la supra programo, La bipa sono zumas poste 20 Minutoj kun mesaĝo indikanta ke la rizo estas preta. Ĉi tiuj programaj kuroj unu fojo kaj haltigoj post ĝia unua ekzekuto. En unu pafis scheduler, La kura metodo estas alvokita kiam la tempon finas. Ĝi ludas la bipan sonon montras la mesaĝon sur la ekrano. La apliko finas unufoje la minutatoron estas efektivigita.








Enhorariganta ripetiĝanta taskojn:

La java minutatoro povas esti uzita enhorarigi taskojn kiu daŭrigas ripetiĝanta ĉe regula intertempo. Ekz. La koda ereto en Listero 1 Presas la sekvantaron:

Enlistiganta 3: Eligita de ripetiĝanta scheduler

[Kodo]

Kalkulo-> 0 : Hala Mondo ! Tio ĉi estas java scheduler

Kalkulo-> 1 : Hala Mondo ! Tio ĉi estas java scheduler

Kalkulo-> 2 : Hala Mondo ! Tio ĉi estas java scheduler

Kalkulo-> 3 : Hala Mondo ! Tio ĉi estas java scheduler

Kalkulo-> 4 : Hala Mondo ! Tio ĉi estas java scheduler

Kalkulo-> 5 : Hala Mondo ! Tio ĉi estas java scheduler

Kalkulo-> 6 : Hala Mondo ! Tio ĉi estas java scheduler

Kalkulo-> 7 : Hala Mondo ! Tio ĉi estas java scheduler

Kalkulo-> 8 : Hala Mondo ! Tio ĉi estas java scheduler

Kalkulo-> 9 : Hala Mondo ! Tio ĉi estas java scheduler

Kalkulo-> 10 : Hala Mondo ! Tio ĉi estas java scheduler

[/Kodo]

Kiel ni vidas ĉi tie ke la scheduler haltigoj kiam la kalkulaj atingoj 10. Ĉi tiu kontrolo estas menciita en la kodo. Se ni havas postulon kuri ĉi tiun programon senfine ni devas akiri liverita de la kontrolo: Se (Kalkulo > 10).

Alia ekzemplo de ripetiĝanta tasko scheduler povus esti ke de alarma horloĝo aŭ produktanta ĉiutagan raporton ĉiu mateno ĉe 2 AM. La simpla alarma horloĝa efektivigo estas enlistigita sub. En ĉi tiu efektivigo ĉiu mateno ĉe 6:00 ESTAS tie estos bipa sono kun mesaĝo montranta la daton kaj tempon.

Enlistiganta 4: Alarma horloĝa efektivigo

[Kodo]

Pako Com.Hejme.Minutatoro ;

Importaĵo Java.Awt.Toolkit ;

Importaĵo Java.Teksto.SimpleDateFormat ;

Importaĵo Java.Util.Dato ;

Importaĵo Org.Kahelanta.Enhorariganta.Scheduler ;

Importaĵo Org.Kahelanta.Enhorariganta.SchedulerTask ;

Importaĵo Org.Kahelanta.Enhorariganta.Ekzemploj.Iterators.DailyIterator ;

Publika Klaso AlarmClock {

Privata Fina Scheduler scheduler = Nova Scheduler () ;

Privata Fina SimpleDateFormat dateFormat =

Nova SimpleDateFormat( ” Dd MMM yyyy HH:mm:Ss.SSS ” ) ;

Privata Fina Int HourOfDay, Eta, Due ;

Publika AlarmClock( Int HourOfDay, Int Eta, Int Due ) {

Tio ĉi.HourOfDay = hourOfDay ;

Tio ĉi.Eta = minuto ;

Tio ĉi.Dua = sekundo ;

}

Publika Malplena Komenco () {

Scheduler.Horaro (Nova SchedulerTask () {

Publika Malplena Kurita () {

SoundAlarm () ;

}

Privata Malplena SoundAlarm () {

Sistemo.Ekstere.Println(“Halo Bonan matenon ! ” +

“Ĝi estas ” + DateFormat.Formato ( Nova Dato () ) ) ;

Toolkit.GetDefaultToolkit().Bipo() ;

}

}, Nova DailyAlarmIterator (HourOfDay, Eta, Due) ) ;

}

Publika Senmova Malplena Ĉefa ( Ŝnuro [] Args ) {

AlarmClock alarmClock = Nova AlarmClock ( 6, 0, 0 );

AlarmClock.Komenco () ;

}

}

[/Kodo]

Ĉi tiu programo estas malsama de la riza minutatora programo kiel ni vidas ke ĉi tie ni kreas okazon de la Scheduler (Org.Kahelanta.Enhorariganta.Scheduler) Prefere ol tio de la Minutatoro (Java.Util.Minutatoro) Ludi la alarmon. Ankaŭ anstataŭ enhorariganta la taskon post fiksa prokrasto kiel en listero 1, Ĉi tiu programo uzas DailyIterator klaso difini la horaron. La DailyIterator klaso efektivigas la SheduleIterator fasado. La ScheduleIterator difinas la ekzekuton de SchedulerTask kiel serio de java.Util.Dataj objektoj. La sekvanta () Metodo en la ScheduleIterator tiam iterates super la Dataj objektoj en kronologia ordo. La DailyAlarmIterator klaso’ Sekvanta metodo revenas la Datajn objektojn kiu reprezentas la saman tempon ĉiu tago 6:00 AM. Tiel, Sur voko de la sekvanta () Metodo ni akiras 6:00 AM de la postaj tagoj. Tio ĉi daŭrigas ripetanta kasregistrilon la programo estas haltita.

La Enhorariganta kadro:

La Enhorariganta kadro konsistas de tri eroj:

  • La ScheduleIterator Fasado.
  • La Scheduler klaso.
  • La SchedulerTask klaso.

Ekstere de ĉi tiuj tri ni jam parolis pri la SchedulerInterface en detalo. La alia du Scheduler klaso kaj SchedulerTask klaso estas bazita sur Minutatoro kaj TimerTask klasoj respektive.

Simila al la riza minutatoro, ĉiu kaj ĉiu okazo de Scheduler kreas okazon de Minutatoro provizi la fundamentan enhorariganta. Anstataŭ la ununura unu-pafita minutatoron uzita efektivigi la rizan minutatoron, La Scheduler ŝnuroj kune ĉeno de unu-pafita minutatorojn efektivigi SchedulerTask klaso kiu estas specifita de la ScheduleIterator.

Resuma: Tiel ege ni diskutis pri la scheduler kaj ripetiĝanta taskojn kaj ilia efektivigo. Mi esperas vin havas bonan komprenon pri la konceptoj kaj efektivigo. Sekvanta estas kelkaj punktoj memori antaŭ ol ni elektas la ĝustan efektivigon.

  • En Java ellaboranto povas kuri ununuran programon multfoje ĉe certa intertempo. Tio ĉi estas vokita taskon enhorariganta.
  • Scheduler povas esti uzita en la sekvantaj situacioj :
    • Instali alarman horloĝon.
    • Akiri raportojn ĉe regula intertempo.
  • Scheduler povas esti de du tipoj :
    • Unu pafis scheduler.
    • Ripetiĝanta scheduler.

?

?

?

Etikedita sur:
============================================= ============================================== Buy best TechAlpine Books on Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share