Een cyclische executive biedt een alternatief voor het schrijven van een volledige , real - time besturingssysteem . Het bestaat uit een eindeloze lus die verzamelingen acties bevat . Elke set wordt voorafgegaan door een wachttijd die regelt wanneer de set is om zijn acties uit te voeren . De volgende code geeft een voorbeeld : while (true ) { //wacht 3 secondswait ( 3000 ) ;//ontvangen een netwerk bericht ....... //wacht 2 seconden voor volledige opvang van de messagewait ( 2000 ) ;//scannen van de inhoud van het bericht ....... } Deze actie sets kunnen vaak lopen gelijktijdig met een zekere mate van synchronisatie . Op Java , draden zijn een mechanisme voor het uitvoeren van gelijktijdige taken met pauzes om te helpen bij de synchronisatie . Instructies Identificeer Taken 1 Kies een ontwerp patroon dat zich het dichtst bij het gedrag eisen van de toepassing die moet worden gebouwd als een cyclisch executive . Zorg ervoor dat het ontwerp patroon dekt de inhoud van de lus die samen de cyclische executive . Pair 2 het gedrag van het ontwerp patroon met de applicatie-eisen . Zorg ervoor dat elk van de gesynchroniseerde , samenwerkende processen wordt geassocieerd met elk van de in de aanvraag beschreven gedrag . 3 Identificeer de Java - specifieke details die deel uitmaken van elk van het proces Thread klassen van de applicatie . Zorg ervoor dat het opzetten van een synchronisatie- pauze voor elk proces klasse Thread om de juiste timing te verzekeren tussen processen en voorkomen dat abnormale omstandigheden, zoals racen . Maak support klassen om als buffers gegevensuitwisseling tussen processen , zoals wachtrijen , zoals nodig . Maak een log stroom klasse logs opsporen van de uitvoering van elk proces thread definiëren . Organiseer het pakket 4 Bouw een cyclische executive belangrijkste klasse die het proces Thread klassen instantieert , speciale ondersteuning klassen en alle andere benodigde initialisatie , zoals de volgende : class CyclicExec {public static void main ( String [ ] args ) { //initialiseren benodigde middelen .......... ........................... //define a thread log classLogStream ls = new LogStream ( ) ; ......... ............................ //initialiseren support klassen ................. .................... MsgQueue sq = new MsgQueue ( .... ) ; .................. ................... //initialiseren proces thread klassen ......................... ............ //instantiëren het Process_1 proces en definieer de bijbehorende threadProcess_1 p1 = new Process_1 ( ...... ) ; T_Process_1 = new thread ( p1 ) ;//activeren van de draad voor Process_1try { T_Process_1.start ( ) ;} catch ( IllegalThreadStateException e ) { //log een slechte thread start en uitgang .......................... ........... } } } 5 In het pakket elk van het proces Thread klassen , zoals in het volgende voorbeeld : klasse Process_1 breidt thread { //initializationpublic Process_1 ( .... ) { //opzetten van een logboek voor deze thread ( P_S is voorgedefinieerde log streamobject ) PrintStream p1_s = p_s.make_it ( Processs_1_Log_File ) ;//initialiseer het proces thread .. ................................... } .............. ....................... //uitvoeren - ingegeven door de impliciete start ( ) -methode in de belangrijkste classpublic leegte run ( ) { //kern loopwhile ( true) { //kernproces ..................................... //pauze na het uitvoeren van een cyclus van de kern processtry { slaap ( Process_1_Wait ) ;} catch ( InterruptedException e ) { //log a uitzondering pauze .......................... ............. } } } } 6 Bouw de steun klassen die messaging buffers tussen proces discussies met zijn buffer toegang methoden definiëren gekwalificeerd als gesynchroniseerd , zoals de volgende voorbeeld: openbare gesynchroniseerd byte Pushit ( byte ITM) { ................................ ............................. } 7 Bouw een speciale klasse die de logbestanden tracing definieert het gedrag van het proces Thread klassen , zoals : class LogStream { private boolean LogState ;//klasse initializerpublic LogStream ( String LogStateIn ) { this.LogState = false; if ( LogStateIn.equals ( " ja " ) ) this.LogState = true; } //maak een log stream naar een filepublic PrintStream make_it ( String LogLocation ) { PrintStream this1 ; String This2 if ( this.LogState ) { This2 = new String ( LogLocation ) ; } else { This2 = new String ( " /dev /null " ) ; } try { this1 = new PrintStream (nieuw FileOutputStream ( This2 , true ) ) ; } catch ( Exception e ) { this1 = null; } return this1 ; } } Test and Deliver 8 Definieer een opeenvolging van testscenario's voor zowel extreme en normale bedrijfsomstandigheden te dekken om de synchronisatie tussen de draden proces te verfijnen . beoordeling 9 het proces thread logs om ervoor te zorgen dat het proces thread klassen werken zoals verwacht . Zorg ervoor dat er geen race- of soortgelijke omstandigheden voorgedaan . 10 Bereid de application delivery pakket door het opnemen van de ( uitvoerbare ) bestanden klasse voor elk van de draden proces , de belangrijkste klasse , messaging ondersteuning klassen en log stroom klasse . Onder meer scripts die lossen en het opzetten van de class-bestanden , evenals initialiseren de directory waar proces thread logbestanden moeten worden gevestigd .
|