Попытка визуализации и понимания синхронизации.
- В чем разница между использованием объекта статической блокировки (код A) и объекта нестатического блокирования (код B) для синхронизированного блока?
- Как он отличается в практических приложениях?
- Каковы подводные камни, которые у других не было бы?
- Каковы критерии для определения того, какой из них использовать?
Код A
public class MyClass1 {
private static final Object lock = new Object();
public MyClass1() {
//unsync
synchronized(lock) {
//sync
}
//unsync
}
}
Код B
public class MyClass2 {
private final Object lock = new Object();
public MyClass2() {
//unsync
synchronized(lock) {
//sync
}
//unsync
}
}
Примечание
В приведенном выше коде показаны конструкторы, но вы можете говорить о том, как поведение отличается от статического метода и нестатического метода. Также было бы полезно использовать статический замок, когда синхронизированный блок модифицирует статическую переменную-член?
Я уже смотрел ответы в на этот вопрос, но не достаточно ясно, каковы разные сценарии использования.