Java, mehrere Threads mit nur einer nach dem anderen ausgeführt wird
-
09-10-2019 - |
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 ...
laufenMein 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?
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:
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.