Якщо у мене в одному класі є 2 синхронізованих методу, але кожен, хто має доступ до різних змінних, може 2 потоку отримати доступ до цих двох методів одночасно? Чи відбувається блокування на об'єкті, чи він стає таким же специфічним, як змінні всередині синхронізованого методу?
Приклад:
class X {
private int a;
private int b;
public synchronized void addA(){
a++;
}
public synchronized void addB(){
b++;
}
}
Чи можуть 2 потоки отримати доступ до того самого екземпляра, що виконує клас X x.addA(
) і x.addB()
одночасно?
synchronized (this)
блоку навколо тіла методу. Об'єкт "this" не стає заблокованим, скоріше об'єкт "this" використовується як mutex, і тілу не дозволяється виконувати одночасно з іншими розділами коду, також синхронізованими на "this". Це не впливає на інші поля / методи "цього", які не синхронізуються.