Se ho 2 metodi sincronizzati nella stessa classe, ma ognuno accede a variabili diverse, 2 thread possono accedere a quei 2 metodi contemporaneamente? Il blocco si verifica sull'oggetto o diventa specifico come le variabili all'interno del metodo sincronizzato?
Esempio:
class X {
private int a;
private int b;
public synchronized void addA(){
a++;
}
public synchronized void addB(){
b++;
}
}
2 thread possono accedere alla stessa istanza dell'esecuzione di classe X x.addA(
) e x.addB()
allo stesso tempo?
synchronized (this)
blocco attorno al corpo del metodo. L'oggetto "questo" non viene bloccato, piuttosto l'oggetto "questo" viene utilizzato come mutex e al corpo viene impedito di eseguire contemporaneamente altre sezioni di codice sincronizzate su "questo". Non ha alcun effetto su altri campi / metodi di "this" che non sono sincronizzati.