Frage

ich an einer Aufgabe arbeite und haben zwei Klassen erstellen, stellt man eine Person, die andere eine Brücke darstellt. Es kann nur eine Person „crossing“ die Brücke zu jeder Zeit sein, aber es könnte Leute warten überqueren

I umgesetzt dies leicht mit Multi-Threading ermöglicht für mehrere Personen auf einmal zu überqueren, aber ich bin Probleme haben, wenn es ändert nur ein Thread zu ermöglichen ...

laufen

Mein Hauptproblem ist die Klasse Design sie wollen, muss ich die Fäden in der Person Klasse beginnen, aber die Brückenklasse muss in der Lage sein, zu warten und teilen sie Start / Stopp

Alle Ideen, wie kann ich das tun?

War es hilfreich?

Lösung

Sie wollen wahrscheinlich auf wait und notify zu lesen. Es gibt Tutorials mit einer Google-Suche.

Aber nachdem Sie sie ein wenig verstehen, wollen Sie die Person haben Objekte Anruf wait. Dann möchten Sie die Brücke Objekt Anruf notify. Wenn eine Person Objekt kehrt von wait, ist es wiederum zu überqueren (wie ich das Problem verstehen.) Wenn die Person Kreuze, würde die Brücke Objekt notify wieder aufrufen.

Stellen Sie sicher, synchronize Sie richtig. Die Tutorials sollten helfen.

Bitte lesen Sie diese Frage auch: Wie Wartezeit verwenden und benachrichtigen, Java?

Andere Tipps

Sperren ein Objekt wie folgt aus:

// Bridge.java

public class Bridge {
private Object _mutex = new Object();

    public void cross(Person p)
        synchronized(_mutex) { 
             // code goes here
        }     
    }
}

Das ist einer, wahrscheinlich die einfachste, Methode ..

EDIT:

noch einfacher:

public class Bridge {
    public synchronized void cross(Person p)
    {
        // code goes here
    }
}

Ich glaube, was die Zuordnung Sie bittet zu tun ist, zu verwenden (oder zu implementieren) einen Mutex für den Zugriff auf die gemeinsam genutzte Ressource, auch bekannt als die Brücke. http://en.wikipedia.org/wiki/Mutex

Versuchen java.util.concurrent:

http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Executors.html#newSingleThreadExecutor%28%29

Diese Klasse wil eine ExecutorService produzieren, wo Sie yout „Personen“ einreichen können. Und die Jobes in die Warteschlange gestellt, eine Person zum Zeitpunkt kreuzen.

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