Eine zyklische Exekutive stellt eine Alternative zum Schreiben eines vollwertigen , Echtzeit- Betriebssystem. Es besteht aus einer Endlosschleife , die eine Menge von Aktionen enthält . Jeder Satz wird durch eine Wartezeit , wenn der Satz ist, seine Aktionen ausführen steuert voraus. Der folgende Code ist ein Beispiel : while ( true) { //warten 3 secondswait (3000) ;//erhalten eine Netzwerk-Nachricht ....... //2 Sekunden warten für eine vollständige Aufnahme des messagewait (2000 ) ;//scannen den Inhalt der Nachricht ....... } Diese Aktion Sets können oft gleichzeitig mit einem gewissen Grad der Synchronisation . In Java sind Themen ein Mechanismus für die Ausführung von gleichzeitigen Aufgaben mit Pausen in Synchronisation zu unterstützen. Anleitung
Identifizieren Aufgaben
1
Wählen Sie ein Design -Muster , die zu den Verhalten Anforderungen der Anwendung als zyklische Exekutive gebaut werden am nächsten ist. Stellen Sie sicher, dass das Entwurfsmuster den Inhalt der Schleife , aus denen die zyklische Exekutive abdeckt.
2
Pair die Verhaltensweisen der Entwurfsmuster mit den Anforderungen der Anwendung . Stellen Sie sicher, dass jede der synchronisierten kooperierenden Prozessen mit jedem der Verhaltensweisen in der beschriebenen Anwendung zugeordnet ist.
3
Identifizieren Sie die Java -spezifische Details, die jedem der Prozess Thema Klassen der Anwendung. Vergewissern Sie sich , eine Pause Synchronisation für jeden Prozess Thread-Klasse , um das richtige Timing zwischen Prozessen zu gewährleisten und vermeiden anomalen Bedingungen wie Rennsport. Erstellen Unterstützungsklassen als Datenaustausch Puffer zwischen Prozessen , wie Warteschlangen bei Bedarf zu handeln. Erstellt eine Log -Stream -Klasse , um Protokolle Tracing die Ausführung jedes Prozesses Thread zu definieren.
Organisieren der Paket
4
Baue eine zyklische Exekutive Hauptklasse , dass der Prozess Thema Klassen instanziiert , besondere Unterstützung Klassen und andere erforderliche Initialisierung , wie die folgenden :
Klasse CyclicExec {public static void main ( String [] args ) {//initialisieren benötigten Ressourcen .......... ........................... //definieren einen Thread log classLogStream ls = new LogStream (); ......... ............................ //initialisieren Unterstützung Klassen ................. .................... MsgQueue sq = new MsgQueue (....) ; .................. ................... //initialisieren Prozessgewinde Klassen ......................... ............ //instanziieren die Process_1 Prozess definieren und die damit verbundenen threadProcess_1 p1 = new Process_1 ( ......); T_Process_1 = new Thread (p1) ;//aktivieren Sie die Gewinde für Process_1try { T_Process_1.start (); } catch ( IllegalThreadStateException e) {//log einen schlechten Start und Faden Ausfahrt .......................... ........... }}}
5
zu dem Paket jede der Prozess Thema Klassen , wie das folgende Beispiel zeigt:
Klasse Process_1 erstreckt Thema {//initializationpublic Process_1 (.... ) {//einrichten eines Log für diesen Thread ( p_s ist vordefinierten Log -Stream-Objekt ) PrintStream p1_s = p_s.make_it ( Processs_1_Log_File ) ;//Initialisierung der Prozess Thread .. ................................... } .............. ....................... //Ausführung - aufgefordert durch die implizite start () -Methode in der Haupt- classpublic void run () verwendet { //core loopwhile ( true) { //Kernprozess ..................................... //Pause nach dem Ausführen einer Zyklus des Kerns processtry { sleep ( Process_1_Wait ); } catch ( InterruptedException e) {//log eine Pause Ausnahme .......................... ............. }}}}
6
Baue die Unterstützung Klassen, die Messaging- Puffer zwischen Prozess- Themen mit seinem Puffer Zugriffsmethoden definieren qualifiziert als synchronisiert , wie die folgende Beispiel zeigt:
public byte PushIt (byte ITM) { ................................ ............................. }
7
Bauen eine besondere Klasse, die die Log-Dateien definiert Tracing das Verhalten der Prozess Thema Klassen, z. B. :
Klasse LogStream {private boolean LogState ;//Klasse initializerpublic LogStream (String LogStateIn ) { this.LogState = false; if ( LogStateIn.equals ("ja" ) ) this.LogState = true; } //erstellen eines Protokolls Strom zu einem 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 (neu FileOutputStream ( This2 , true) ); } catch ( Exception e) { This1 = null; } return This1 ;}}
Test and Deliver
8
Definieren Sie eine Folge von Test- Szenarien sowohl extreme und normalen Betriebsbedingungen abzudecken, um die Synchronisation zwischen den Prozess-Threads zu verfeinern.
9
Bewertung der Prozess Thread anmeldet , um sicherzustellen, dass der Prozess Thema Klassen betrieben wie erwartet. Stellen Sie sicher, dass keine Rennen oder ähnlichen Bedingungen aufgetreten.
10
Bereiten Sie die Application-Delivery- Paket, einschließlich der Klasse (ausführbare Dateien) für jede der Prozess-Threads , die Hauptklasse , Messaging-Unterstützung Klassen -und Log- Stream Klasse. Fügen Sie Skripts, und entladen Einrichten der Class-Dateien sowie initialisieren das Verzeichnis -Thread -Log-Dateien liegen sollen .