Verständnis "synchronized"

Status
Nicht offen für weitere Antworten.

Marcel_Handball

Bekanntes Mitglied
Hey,

folgende Situation:
Code:
class Main{

     static int i;

     public synchronized void foo(){
          i++;
     }
}

Ich arbeite gerade nochmal die Insel durch und hänge mich an einer Formulierung auf.

Bei einem Konflikt (mehrere Threads rufen foo() auf) verhindert synchronized, dass sich mehr als ein Thread gleichzeitig im kritischen Abschnitt, dem Rumpf der Funktion foo(), befinden kann. Dies bezieht sich nur auf mehrere Aufrufe von foo() für dasselbe Objekt. Zwei verschiedene Threads können durchaus parallel die Funktion foo() für unterschiedliche Objekte ausführen.

Wenn nun zwei Threads die Methode auf zwei unterschiedliche Objekte parallel aufrufen können (Objektmethode mit Zugriff auf statische Variable), wie wird dann i behandelt, dass sich beide Objekte teilen?
 
S

Spacerat

Gast
So hat "synchronized" hier natürlich keinen Sinn, da es sich so nur auf die Objekt-Instanz bezieht. Es müsste sich auf die gesammte Klasse beziehen. Etwa so:
Code:
public void foo()
{
    synchronized (getClass()) {
        i++;
    }
}
 

Marco13

Top Contributor
Und um die Frage nach dem i zu beantworten: Das ist "Zufall". Es kann also sein, dass i am Anfang 0 ist, und dann zwei Threads diese Methode aufrufen, und i danach trotzdem nicht 2 sondern nur 1 ist.
 

fjord

Bekanntes Mitglied
Bei Variablen die von mehreren Threads genutzt werden ist auch nicht sichergestellt, dass alle dieselbe Version der Variablen sehen. Das Schlüsselwort mit dem man das sicherstellen kann ist volatile. Dabei muss man aber immernoch beachten, dass i++ keine atomare Operation ist. Bei ungünstigem Sheduling kann es also passieren, dass ein Inkrement verloren geht.
Ich würde dir da also auch wie Wildcard zu AtomicInteger raten.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Threads, wie genau läuft das in Java ab? (Ich kann Threads erstellen und nutzen, nur das Verständnis) Allgemeine Java-Themen 6
H Mathematisch fehlendes Verständnis (3D-Denken) Allgemeine Java-Themen 14
A Hilfe beim Verständnis Allgemeine Java-Themen 16
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
parrot Verständnis des Codes Allgemeine Java-Themen 3
L Vererbung Verständnis Probleme Vererbung Allgemeine Java-Themen 2
M True or false Verständnis Allgemeine Java-Themen 5
D (Verständnis-)Problem mit Unterklasse Allgemeine Java-Themen 4
J Josephus Verständnis Allgemeine Java-Themen 1
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14
H Erste Schritte Beispiele zum Verständnis Allgemeine Java-Themen 3
T Input/Output Verständnis: Wo wird das File auf die Festplatte gepackt? Allgemeine Java-Themen 4
B Hilfe beim Verständnis von Mergesort Allgemeine Java-Themen 5
C int zu byte cast - verständnis Allgemeine Java-Themen 3
M Verständnis enum - switch Allgemeine Java-Themen 2
C Verständnis zur Strukturierung von Java-Projekten/Interfaces Allgemeine Java-Themen 2
C Autoboxing Verständnis Allgemeine Java-Themen 4
S Probleme mit dem allgemeinen Verständnis zuverrebung usw. Allgemeine Java-Themen 6
S Verständnis Problem - Classpath Allgemeine Java-Themen 5
J Synchronized Probleme Allgemeine Java-Themen 7
D ReentrantLock oder Synchronized ? Allgemeine Java-Themen 3
B Threads synchronized Allgemeine Java-Themen 3
OnDemand Threads und synchronized Allgemeine Java-Themen 9
N Best Practice Semi-Synchronized Zugriff Allgemeine Java-Themen 0
E Verständnisfrage zu synchronized-Blöcken Allgemeine Java-Themen 3
J yield() Aufruf in einer synchronized-Methode Allgemeine Java-Themen 13
A Frage zu Synchronized Allgemeine Java-Themen 5
R Synchronized - auf welchem Objekt Allgemeine Java-Themen 16
R synchronized methode rekursiv aufrufen Allgemeine Java-Themen 5
P synchronized Allgemeine Java-Themen 4
S komplexe synchronized bedingungen Allgemeine Java-Themen 6
G synchronized Allgemeine Java-Themen 7
J Threads und synchronized Allgemeine Java-Themen 18
hdi synchronized & volatile Allgemeine Java-Themen 10
G zwei mal synchronized Allgemeine Java-Themen 5
J synchronized block mit this und wait() Allgemeine Java-Themen 5
T Thread synchronized Allgemeine Java-Themen 5
Kr0e Synchronized Allgemeine Java-Themen 4
K synchronized und notify / notifyAll Allgemeine Java-Themen 8
G synchronized-Sclüsselwort: welche Reihenfolge zum Betreten? Allgemeine Java-Themen 6
R synchronized "gegen sich selbst" Allgemeine Java-Themen 5
R ConcurrentModificationException trotz synchronized? Allgemeine Java-Themen 12
R Thread-Problem, und synchronized bringt nix Allgemeine Java-Themen 4
J synchronized (bitte beantworten, urgent! danke) Allgemeine Java-Themen 11
H Ein synchronized Block ausreichend? Allgemeine Java-Themen 6
G synchronized Klasse? Allgemeine Java-Themen 6
G synchronized + threads Allgemeine Java-Themen 12
A deadlocks bei synchronized Allgemeine Java-Themen 3
K vector, synchronized und mehrere methoden Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben