Einzelnen Beitrag anzeigen

Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#1

[Java] Thread-Synchronisation

  Alt 15. Jun 2008, 23:29
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?
Angehängte Dateien
Dateityp: zip elevatorcontroller_590.zip (585 Bytes, 6x aufgerufen)
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat