AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[Java] Thread-Synchronisation

Ein Thema von Hador · begonnen am 15. Jun 2008 · letzter Beitrag vom 17. Jun 2008
Antwort Antwort
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
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#2

Re: [Java] Thread-Synchronisation

  Alt 17. Jun 2008, 22:58
die Frage is nun auch, wie wo wann wird der Elevator genutzt, wenn 2 threads gleich am anfang getNext versuchen zu verarbeiten, aber noch keine tasks drin sind, legt sich erst der eine schlafen, kritischer abschnitt frei, danach kommt der 2. und legt sich gleich dazu.

wäre mal ein denkbares szenario was die ausgabe erklärt.
und irgendwo gibts den 3. thread der addTask ausführt
  Mit Zitat antworten Zitat
Benutzerbild von phXql
phXql

Registriert seit: 11. Mär 2004
Ort: Mühldorf
824 Beiträge
 
#3

Re: [Java] Thread-Synchronisation

  Alt 17. Jun 2008, 23:33
wait() gibt den Lock frei. Liegts daran?
"Dunkel die andere Seite ist"
"Yoda! Halts Maul und iss deinen Toast!"
  Mit Zitat antworten Zitat
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#4

Re: [Java] Thread-Synchronisation

  Alt 17. Jun 2008, 23:57
ja sicher, mit wait() wird der prozess welcher als die erste Nachricht oben ausgibt schlafen gelegt, den Lock für den Elevator gibt er dabei frei. Somit kann ein 2. Prozess diese Methode aufrufen und ausführen, was 2x obige Nachricht zur Folge hat.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz