Wenn ich zwei synchronisierte Methoden in derselben Klasse habe, aber jeweils auf unterschiedliche Variablen zugreift, können 2 Threads gleichzeitig auf diese beiden Methoden zugreifen? Tritt die Sperre für das Objekt auf oder wird sie so spezifisch wie die Variablen innerhalb der synchronisierten Methode?
Beispiel:
class X {
private int a;
private int b;
public synchronized void addA(){
a++;
}
public synchronized void addB(){
b++;
}
}
Kann 2 Threads greifen auf dieselbe Instanz der Klasse X Durchführung x.addA(
) und x.addB()
zur gleichen Zeit?
synchronized (this)
Block um den Hauptteil der Methode. Das Objekt "this" wird nicht gesperrt, sondern das Objekt "this" wird als Mutex verwendet, und es wird verhindert, dass der Body gleichzeitig mit anderen Codeabschnitten ausgeführt wird, die ebenfalls mit "this" synchronisiert sind. Es hat keine Auswirkung auf andere Felder / Methoden von "this", die nicht synchronisiert sind.