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