Gewinde State Machines in Java
-
19-09-2019 - |
Frage
Gibt es eine Möglichkeit, einen Thread in einem Zustand des Haltens für Änderungen warten? Ich meine TLL etwas geschieht warten (ändern var, Call-Methode, etc ..) vielleicht braucht es Ereignis-Listener verwenden oder synchronisierten Objekte / Methoden ..
Die übliche aproach für statemachines wie diese
Das wird eine do {..} while (true) Schleife, die für Singled Gewinde (und keine GUI) Anwendung funktionieren könnte, aber es cant't mit Gewinden verwendet werden .. (Zumindest wollen Sie einen Kern für jede Gewindezustandsmaschine verwenden)
So, dass der Prozessor aufwändige Aufgabe eine einfache (und hässlich) Art und Weise zu vermeiden eine „periodische Checker“ ist, ich meine das Hinzufügen eines Schlaf andere Idee ist ein synchronisiertes Objekt definieren und statt Thread Schlaf mit Warte
Beispiel:
do{
Switch(state)
{
case STATE_A:
//..A things
break;
case STATE_B:
//..B things
break;
...
case STATE_Z:
//..Z things
break;
}
// Here! => wait()? Thread.sleep(TIME_CONST)? //Hold and yield
}while(powerOn);
Der Nachteil ist das Hinzufügen von Komplexität synchronisiert Verwendung oder dass alles, was innerhalb TIME_CONST geschehen wäre unsichtbar
Ich möchte andere Ideen wissen, dies zu tun, Dank!
Lösung
Ja, würden Sie wait
/ notify
werden. Das ist, was es ist für.
Oder vielleicht Ihre Zustandsmaschine benötigt keine eigenen Thread haben. Andere Themen könnten eine update
Methode auf der Zustandsmaschine rufen, wenn etwas Interessantes passiert.
Andere Tipps
Wenn Sie eine angeben Warteschlange Zustandsmaschine in Umple dann der Code hierfür wird für Sie generiert werden. eine umple Zustandsmaschine angibt, die als Warteschlange schafft speziell einen Thread, der für Ereignisse (benannt Methodenaufrufe) wartet. Anderer Code in der Klasse kann gleichzeitig in dem ursprünglichen Thread geschehen (s). Das Schlüsselwort ‚Warteschlange befinden‘ platziert werden soll kurz vor der Definition der Zustandsmaschine.
Siehe http://statemachines.umple.org für weitere Informationen über Zustandsmaschinen in Umple zu schaffen. Sie können Umple als nur ein Präprozessor für Java betrachten (und für andere Sprachen) in diesem Zusammenhang.
Sie können auch mit Schloss und Zustand (Java 1.5+). Es ist wie wait/notify
und gibt es ein Beispiel in der javadoc
Versuchen Sie, ein Rohr mit zwischen der Ereignisquelle Gewinde und dem FSM Ausführungs Gewinde. Dies ist ausreichend für eine 2 Gewinde Umsetzung.