Si j'ai 2 méthodes synchronisées dans la même classe, mais chacune accédant à des variables différentes, est-ce que 2 threads peuvent accéder à ces 2 méthodes en même temps? Le verrou se produit-il sur l'objet ou est-il aussi spécifique que les variables à l'intérieur de la méthode synchronisée?
Exemple:
class X {
private int a;
private int b;
public synchronized void addA(){
a++;
}
public synchronized void addB(){
b++;
}
}
Deux threads peuvent-ils accéder à la même instance de classe X exécutant x.addA(
) et x.addB()
en même temps?
synchronized (this)
bloc autour du corps de la méthode. L'objet «this» ne se verrouille pas, mais l'objet «this» est utilisé comme mutex et le corps est empêché de s'exécuter simultanément avec d'autres sections de code également synchronisées sur «this». Cela n'a aucun effet sur les autres champs / méthodes de "this" qui ne sont pas synchronisés.