OOP Synchronized Methoden, zugriff aus Threads

mabuhay

Bekanntes Mitglied
Hallo

Ich habe den Code gerade nicht mehr da ich ihn schon abgeändert habe, aber mein Problem war:

Ich hatte eine Klasse mit zwei Methoden (Methode1 und Methode2), beide synchronized. Zwei Threads (Thread1 und Thread2) waren am laufen und jeder hat in bestimmten Intervallen eine der Methoden aufgerufen (Thread1 immer Methode 1 und Thread2 immer Methode2). Wenn nun Thread1 Methode1 aufgerufen hat, worin eine Verbindung zu einem Server aufgebaut werden sollte und darum etwas Zeit benötigte, war Methode2 blockiert (auch wenn diese leer war oder nur ein System.out beinhaltete). Macht das Sinn? Wird in Java eine Art Mutex verwendet welche der Klasse angehört?

mfg
 
ja, weil du es so konfiguriert hast,

es steht dir frei, synchronized auf verschiedene Monitore zu beziehen (statt des Objektes an sich)
oder gar nicht synchronized zu verwenden
 
Synchronized brauche ich, da die Methoden entweder über den Thread oder durch den Benutzer auf einen Buttonklick aufgerufen werden.

Was heisst das genau, "weil du es so konfiguriert hast"? Also einfach da ich es auf die Methode angewandt habe?
Also so wie ich das nun verstehe wird bei einer synchronized-Methode der Monitor der Klasse/des Objektes wo die Methode drin ist verwendet. Ich könnte aber auch wie in diesem Beispiel aus Galileo Computing :: Java ist auch eine Insel – 10.5 Synchronisation über kritische Abschnitte

Java:
StringBuffer sb = new StringBuffer(); 
synchronized( sb ) 
{ 
  sb.append( "Transpirations-" ); 
  sb.append( "Illustration" ); 
  sb.append( "\t" ); 
  sb.append( "Röstreizstoffe" ); 
}

einen bestimmten Abschnitt oder ein anderes Objekt synchronisieren, dadurch würde nur dieser Abschnitt geblockt.
 
eben, du kannst es so oder so machen, du schreibst es doch selber?

synchronized( sb )
oder
synchronized( this )
oder
synchronized an einer Methode
hat alles gewisse Auswirkungen
 

Zurück
Oben