Jeśli mam 2 zsynchronizowane metody w tej samej klasie, ale każda ma dostęp do różnych zmiennych, czy 2 wątki mogą uzyskać dostęp do tych 2 metod jednocześnie? Czy blokada występuje na obiekcie, czy staje się tak specyficzna jak zmienne w zsynchronizowanej metodzie?
Przykład:
class X {
private int a;
private int b;
public synchronized void addA(){
a++;
}
public synchronized void addB(){
b++;
}
}
Czy 2 wątki mogą uzyskać dostęp do tego samego wystąpienia klasy X x.addA(
) i x.addB()
jednocześnie?
synchronized (this)
blokiem wokół ciała metody. Obiekt „this” nie zostaje zablokowany, raczej obiekt „this” jest używany jako muteks, a ciało nie może wykonywać jednocześnie z innymi sekcjami kodu również zsynchronizowanymi z „this”. Nie ma wpływu na inne pola / metody „tego”, które nie są zsynchronizowane.