En syklisk utøvende gir et alternativ til å skrive en fullverdig , real -time operativsystem . Den består av en uendelig løkke som inneholder sett med handlinger. Hvert sett kommer etter en venteperiode som styrer når settet er å utføre sine handlinger . Følgende kode gir et eksempel : while ( true) { //vente tre secondswait ( 3000 ) ;//motta et nettverk melding ....... //vente to sekunder for fullstendig mottak av messagewait ( 2000 ) ;//skanne innholdet i meldingen ....... } Disse handling sett kan ofte kjøre samtidig med en viss grad av synkronisering. I Java , tråder er en mekanisme for å kjøre samtidige oppgaver ved hjelp av pauser for å bistå i synkroniseringen . Instruksjoner
Identifiser oppgaver
en
Velg et design mønster som er nærmest til atferd kravene i programmet skal bygges som en syklisk executive. Sørg for at design mønsteret dekker innholdet av loopen å gjøre opp den sykliske executive.
2
Pair atferd av design mønster med programmet kravene . Sørg for at hver av de synkroniserte , samarbeidende prosesser er knyttet til hver av atferd som er beskrevet i søknaden.
3
Identifiser Java - spesifikke detaljer som utgjør hver av prosessen Tråd klasser av søknaden. Sørg for å sette opp en synkronisering pause for hver prosess Thread klassen for å sikre riktig timing mellom prosesser og unngå unormale tilstander som racing. Lag støtte klasser for å opptre som datautveksling buffere mellom prosesser, for eksempel køer , etter behov. Lag en loggstrømmen klasse å definere logger sporing gjennomføringen av hver prosess tråden.
Organiser Package
4
Bygg en syklisk utøvende største klassen som instantiates prosessen Thread klasser , spesielle støtte klasser og annen nødvendig initialisering , for eksempel følgende : en
klasse CyclicExec { public static void main ( String [] args ) { //initialisere trengs ressurser .......... ........................... //definerer en tråd log classLogStream ls = new LogStream (); ......... ............................ //initialisere støtteklasser ................. .................... MsgQueue sq = new MsgQueue (.... ); .................. ................... //initialisere prosess thread klasser ......................... ............ //instantiate Process_1 prosess og definere tilhørende threadProcess_1 p1 = new Process_1 ( ......) ; T_Process_1 = new Thread ( p1 ) ;//aktivere tråden for Process_1try { T_Process_1.start (); } catch ( IllegalThreadStateException e ) { //logge en dårlig tråd start og exit .......................... ........... } } }
5
Legg til pakken hver av prosessen Tråd klasser , som i følgende eksempel : en
klasse Process_1 utvider Thread { //initializationpublic Process_1 (.... ) { //sette opp en logg for denne tråden ( p_s er forhåndsdefinert loggstrømmen objekt) PrintStream p1_s = p_s.make_it ( Processs_1_Log_File ) ;//klargjøre prosessen tråden .. ................................... } .............. ....................... //utførelse - bedt gjennom den implisitte start ( )-metoden som brukes i hovedmenyen classpublic void run ( ) { //core loopwhile ( true) { //core prosess ..................................... //pause etter å ha kjørt en syklus av kjernen processtry { søvn ( Process_1_Wait ) ;} catch ( InterruptedException e ) { //logge en pause unntak .......................... ............. } } } }
6
Bygg støtte klasser som definerer meldingstjenester buffere mellom prosess tråder med sine buffer tilgang metoder kvalifisert som synkroniseres , som følgende eksempelet viser : en
offentlige synkronisert byte PushIt ( byte Itm ) { ................................ ............................. }
7
Bygg en spesiell klasse som definerer loggfilene sporing oppførselen til prosessen Tråd klasser, for eksempel : en
klasse LogStream {private boolean LogState ;//klasse initializerpublic LogStream (String LogStateIn ) { this.LogState = false; if ( LogStateIn.equals ( "ja" ) ) this.LogState = true; } //opprette en logg stream til en 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 ( ny FileOutputStream ( this2 , true) ); } catch ( Exception e ) { This1 = null; } retur This1 ;} }
Test and Deliver
8
Definer en sekvens av test scenarier for å dekke både ekstreme og normale driftsforhold for å avgrense synkronisering mellom prosess- tråder.
9
gjennomgang prosessen tråden logger for å sørge for at prosessen thread klasser drives som forventet . Pass på at ingen racing eller lignende tilstander oppstått.
10
Forbered søknaden levering pakken ved å inkludere klassen ( kjørbare ) filer for hver av prosessen tråder, den viktigste klassen , meldingstjenester støtte klasser og loggstrømmen klasse . Inkluder skript som losse og sette opp klassen filene samt klargjøre katalogen der prosessen tråden loggfiler skal ligge .