En cyklisk executive giver et alternativ til at skrive et altfavnende , real -time operativsystem. Den består af en uendelig løkke , der indeholder sæt af handlinger. Hvert sæt indledes med en venteperiode , der styrer , når sættet er at udføre sine handlinger. Følgende kode giver et eksempel : while ( true) { //vent 3 secondswait ( 3000) ;//modtage en net besked ....... //vent 2 sekunder fuldstændig modtagelsen af messagewait (2000) ;//scanne indholdet af meddelelsen ....... } Disse indsatsområder sæt kan ofte køre sideløbende med en vis grad af synkronisering. I Java er gevind en mekanisme til at køre samtidige opgaver ved hjælp af pauser til at bistå med synkronisering. Instruktioner
Identificer Opgaver
1
Vælg et design mønster, der ligger tættest på adfærd kravene til ansøgningen , der skal bygges som en cyklisk udøvende magt. Sørg for, at design mønster omfatter indholdet af løkken gør op den cykliske udøvende magt.
2
Par adfærd af design mønster med ansøgningen krav. Sørg for, at hver af de synkroniserede , samarbejdende processer er forbundet med hver af adfærd er beskrevet i ansøgningen .
3
Identificere de Java -specifikke detaljer, der gør op hver af processens Tråd klasser af ansøgningen. Sørg for at oprette en synkronisering pause for hver proces Thread klassen for at sikre korrekt timing mellem processerne og undgå unormale tilstande såsom racing. Opret support klasser til at fungere som dataudveksling buffere mellem processer, såsom køer efter behov. Opret en log stream klasse til at definere logs sporing udførelsen af hver proces tråd.
Organiser Package
4
Byg en cyklisk udøvende vigtigste klasse , der instantierer processen Tråd klasser , særlig støtte klasser og eventuelle andre påkrævede initialisering, såsom følgende : Hej
class CyclicExec { public static void main ( String [] args ) {//initialisere de nødvendige ressourcer .......... ........................... //define en tråd log classLogStream ls = new LogStream (); ......... ............................ //initialisere support klasser ................. .................... MsgQueue sq = new MsgQueue (....) ; .................. ................... //initialisere proces gevind klasser ......................... ............ //instantiere Process_1 proces og definere dets tilknyttede threadProcess_1 p1 = new Process_1 ( ...... ) T_Process_1 = ny tråd ( p1 ) ;//aktivere gevind til Process_1try { T_Process_1.start ( );} catch ( IllegalThreadStateException e ) {//log en dårlig tråd start og exit .......................... ........... }}}
5
Tilføj til pakken hver proces Tråd klasser følgende eksempel viser : Hej
class Process_1 udvider tråd { //initializationpublic Process_1 (.... ) {//oprettet en log for denne tråd ( P_S er foruddefineret log stream objekt) PrintStream p1_s = p_s.make_it ( Processs_1_Log_File ) ;//initialisere processen tråden .. ................................... } .............. ....................... //udførelse - bedt gennem implicitte start () metode, der anvendes i de vigtigste classpublic void run () { //core loopwhile ( true) { //core proces ..................................... //pause efter at have kørt en cyklus af kernen processtry { sleep ( Process_1_Wait );} catch ( InterruptedException e ) {//log en pause undtagelse .......................... ............. }} }}
6
Byg support klasser, der definerer messaging buffere mellem proces Tråde med sine buffer adgang metoder kvalificeret som synkroniseret , som den følgende eksempel viser : Hej
offentlig synkroniseret byte PushIt ( byte Itm ) { ................................ ............................. }
7
Byg en særlig klasse , der definerer logfilerne sporing adfærd processen Tråd klasser, såsom : Hej
class LogStream { private boolean LogState ;//klasse initializerpublic LogStream (String LogStateIn ) { this.LogState = false; if ( LogStateIn.equals ( "ja" ) ) this.LogState = true ;} //oprette en log stream til en filepublic PrintStream make_it (String LogLocation ) { PrintStream This1 , String dette2 , hvis ( this.LogState ) { dette2 = new String ( LogLocation );} else { dette2 = new String ( " /dev /null "); } try { This1 = new PrintStream (ny FileOutputStream ( dette2 , true) );} catch ( Exception e ) { This1 = null ;} tilbagevenden This1 ;}}
Test og Deliver
8
Definer en sekvens af testscenarier for at dække både ekstreme og normal drift betingelser for at forfine synkronisering mellem processen tråde.
9
anmeldelse processen tråden logs for at sikre , at processen tråd klasser drives som forventet. Sørg for, at intet væddeløb eller lignende forhold fandt sted.
10
Forberede anvendelsen levering pakke ved herunder klasse ( eksekverbare filer) for hver af de proces- tråde, den vigtigste klasse , messaging support klasser og log stream klasse . Medtag scripts, der losser og konfigurere klasse filer samt initialisere den mappe, hvor processen tråd logfiler skal placeres .