En cyklisk verkställande ger ett alternativ till att skriva en fullt utvecklad , realtid operativsystem . Den består av en oändlig loop som innehåller uppsättningar av åtgärder . Varje set föregås av en väntetid som styr när uppsättningen är att utföra sina handlingar . Följande kod ger ett exempel : while ( true ) { //vänta 3 secondswait ( 3000 ) ;//ta emot ett nätverk meddelande ....... //vänta 2 sekunder för fullständig mottagning av messagewait (2000 ) ;//skanna innehållet i meddelandet ....... } Dessa åtgärder uppsättningar ofta kan köras samtidigt med någon grad av synkronisering . I Java , trådar är en mekanism för att köra samtidiga uppgifter med hjälp av pauser för att hjälpa till med synkronisering . Instruktioner
Identifiera Uppgifter
1
Välj ett designmönster som är närmast de särskilda behov av ansökan att byggas som en cyklisk verkställande . Kontrollera att designmönstret täcker innehållet i slingan utgör den cykliska verkställande .
2
Pair beteenden av designmönstret med ansökan kraven . Se till att var och en av de synkroniserade , samarbetande processer är associerad med var och en av de beteenden som beskrivs i ansökan .
3
Identifiera de Java - specifika detaljer som gör upp alla de klasser processgänga av ansökan . Se till att inrätta en synkronisering paus för varje process Thread klass för att säkerställa korrekt timing mellan processerna och undvika onormala tillstånd såsom racing . Skapa support klasser att fungera som utbyte av data buffertar mellan processer, såsom köer , som behövs . Skapa en klass log ström att definiera loggar spåra genomförandet av varje process tråden.
Organisera Package
4
Bygg en cyklisk verkställande huvudklass som exemplifierar klasserna processgänga , särskilt stöd klasser och annan erforderlig initiering , till exempel följande :
class CyclicExec { public void main ( String [] args ) { //initiera behövs resurser .......... ........................... //definiera en tråd log classLogStream ls = ny LogStream ( ) ; ......... ............................ //initiera support klasser ................. .................... MsgQueue sq = ny MsgQueue ( .... ) ; .................. ................... //initiera klasser processgänga ......................... ............ //instansiera Process_1 processen och definiera dess tillhörande threadProcess_1 p1 = new Process_1 ( ...... ) , T_Process_1 = new Thread ( P1 ) ;//aktivera tråd för Process_1try { T_Process_1.start ( ) ;} catch ( IllegalThreadStateException e ) { //log en dålig tråd start och avsluta .......................... ........... } } }
5
Lägg till paketet alla de klasser processgänga , som i följande exempel :
klass Process_1 utökar Thread { //initializationpublic Process_1 ( .... ) { //skapa en logg för den här tråden ( p_s är fördefinierade log strömobjekt ) PrintStream p1_s = p_s.make_it ( Processs_1_Log_File ) ;//initiera processen tråden .. ................................... } .............. ....................... //utförande - uppmanas via den implicita start ( ) metod som används i de viktigaste classpublic void run ( ) { //core loopwhile ( true ) { //core process ..................................... //paus efter att ha kört en cykel av kärnan processtry { sömn ( Process_1_Wait ) ;} catch ( InterruptedException e ) { //log paus undantag .......................... ............. } } } }
6
Bygg stöd klasser som definierar meddelandetjänster buffertar mellan processtrådar med sina metoder buffert tillgång kvalificerad som synkroniserade , som följande exempel:
offentliga synkroniseras byte PushIt ( byte ITM) { ................................ ............................. }
7
Bygg en särskild klass som definierar loggfilerna spåra beteende klasserna processgänga , såsom :
class LogStream { private boolean LogState ;//klass initializerpublic LogStream ( String LogStateIn ) { this.LogState = false; if ( LogStateIn.equals ( " ja " ) ) this.LogState = true; } //skapa en logg ström till en filepublic PrintStream make_it ( String LogLocation ) { PrintStream This1 , String detta2 , om ( this.LogState ) { detta2 = new String ( LogLocation ) ;} else { detta2 = new String ( " /dev /null " ) ;} try { This1 = ny PrintStream ( ny FileOutputStream ( detta2 , true ) ) ;} catch ( Exception e ) { This1 = null ; } retur This1 ;} }
Test och leverera
8
Definiera en sekvens av test scenarier för att täcka både extrema och normala driftsförhållanden för att förfina synkroniseringen mellan processtrådar .
9
Review processen tråden loggar för att se till att processgänga klasserna fungerade som förväntat . Se till att ingen racing eller liknande förhållanden har inträffat .
10
Förbered paketet ansökan leverans genom att inkludera klassen ( körbara filer) för varje process trådar , huvudklassen , meddelandetjänster klasser stöd och log ström klass . Inkludera skript som lastar och ställa in klass-filer samt initierar katalogen där processgänga loggfiler ska lokaliseras .