Ich verstehe nicht, warum mein Code nicht richtig funktioniert. Ich erwarte, dass der erste Thread 4 Sekunden lang auf den zweiten Thread wartet, um eine geteilte boolesche "Freude" auf "wahr" zu setzen, damit der erste Thread "Joy wurde erreicht!"Versuche, geschützte Blöcke zum Arbeiten zu bringen
Wenn ich den Code ausführen, bekomme ich diese Ausgabe:
"No Joy doch ..."
"Mitteile Joy"
Dann friert es und doesn‘ t fahre fort. Wenn mein Verständnis korrekt ist, sollte die notifyAll() -Methode, die von meiner notifyJoy() -Methode aufgerufen wird, t1 von seinem wait() aufwecken, und dann, da die gemeinsame statische boolesche variable Freude nun wahr ist, "Joy wurde erreicht!" sollte auf der Konsole drucken.
Ich arbeite von Oracle "The Java Tutorial", Kapitel 13: Hier ist ein Link zu dem spezifischen Abschnitt: Java Tutorial Website. Ich gehe von dem, was sie haben, und mache ein kleines Beispiel, aber ich kann nicht herausfinden, was ich falsch mache. Jede Hilfe wäre willkommen. Hier ist eine vollständige Kopie meines Codes für Ihre Referenz:
public class JoyTime {
public static void main(String[] args) {
JoyRider j1 = new JoyRider(false);
JoyRider j2 = new JoyRider(true);
Thread t1 = new Thread(j1, "J1");
Thread t2 = new Thread(j2, "J2");
t1.start();
try {
Thread.sleep(4000);
}
catch (InterruptedException e) {}
t2.start();
}
}
class JoyRider implements Runnable {
private static boolean joy = false;
private boolean flag;
public JoyRider(boolean flag) {
this.flag = flag;
}
@Override
public void run() {
synchronized(this) {
if (flag) {
notifyJoy();
}
else {
while (!joy) {
System.out.println("No Joy Yet...");
try {
this.wait();
}
catch (InterruptedException e) {}
}
System.out.println("Joy has been achieved!");
}
}
}
public synchronized void notifyJoy() {
System.out.println("Notifying Joy");
joy = true;
notifyAll();
}
}