2009-07-23 3 views
1

Eine Frage, wenn ich darf.gerichtet notifyAll()

Nehmen wir an, dass mein Haupt-Thread 3 Threads erstellt. Diese 3 Threads rufen wait() für ein bestimmtes Objekt auf. Dann ruft der Haupt-Thread notifyAll() für das gleiche Objekt auf.

Wie kann ich sicherstellen, dass thread2 und nur thread2 fortfahren, während thread1 und thread3 einfach die Benachrichtigung ignorieren und in den Wartezustand zurückkehren?

Im Wesentlichen, wie kann ich meine Benachrichtigung zu einem ausgewählten Thread leiten?

Wenn ich mich nicht irre, wäre dies in Java 5 ziemlich einfach zu tun. Man würde verschiedene Bedingungen erstellen und der Haupt-Thread würde nur die Bedingung erfüllen, auf die Thread2 wartet.

Wie aber würde ich es in pre5 lösen?

Cheers, Vic

Antwort

1

Sie beachten sollten auch ohne notify spontane Folge, dass Fäden können. Du brauchst also immer eine Art von Kondition. Die allgemeine Form des Codes lautet:

Es kann Leistungsgründe geben, nur Threads aufzuwecken, die bestimmte Operationen ausführen. Für diesen Blick in java.util.concurrent.locks, aber beachten Sie, dass es ein Leistungsproblem ist, nicht das Richtige tun-Problem.