Если у меня есть 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» используется как мьютекс, и тело не может выполняться одновременно с другими разделами кода, также синхронизированными с «this». Это не влияет на другие поля / методы «this», которые не синхронизированы.