Code:
public synchronized ElevatorTask getNextTask() {
System.out.println("getNextTask called");
if (tasks.size() == 0) {
try {
wait();
} catch (InterruptedException e) {}
}
System.out.println(tasks.size());
ElevatorTask task = tasks.pollFirst();
System.out.println("getNextTask calls notify()");
notify();
return task;
}
Durch den Modifier
synchronized sollte es ja eigentlich nur einem Thread gestattet sein die Methode aufzurufen. Alle anderen müssen warten bis die Methode abgearbeitet wurde. Eigentlich...
Als Ausgabe bekomme ich jedoch:
Code:
getNextTask called
getNextTask called
addTask called
Also wird
getNextTask direkt von 2 Threads gleichzeitig aufgerufen, was daraufhin auch für einen Fehler sorgt.
EDIT: Die Frage ist natürlich: Warum?