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

state Beispiel

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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top