Статический или нестатический объект блокировки в синхронизированном блоке

Попытка визуализировать и понятьсинхронизация.

Каковы различия между использованиемстатический объект блокировки (код А) инестатический объект блокировки (код 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
  }
}

Запись

В приведенном выше коде показаны конструкторы, но вы могли бы рассказать о различиях в поведении статического и нестатического методов. Кроме того, было бы выгодно использовать статическую блокировку, когда синхронизированный блок изменяет статическую переменную-член?

Я уже посмотрел на ответы вэтот вопрос, но не совсем понятно, каковы различные сценарии использования.

Ответы на вопрос(1)

Ваш ответ на вопрос