Спецификация Java 11: 12.4.2. Подробная процедура инициализации
Поскольку язык программирования Java является многопоточным, инициализация класса или интерфейса требует тщательной синхронизации, поскольку какой-то другой поток может одновременно пытаться инициализировать тот же класс или интерфейс. Также существует вероятность того, что инициализация класса или интерфейса может быть запрошена рекурсивно как часть инициализации этого класса или интерфейса; например, инициализатор переменной в классе A может вызывать метод несвязанного класса B, который, в свою очередь, может вызывать метод класса A. Реализация виртуальной машины Java отвечает за синхронизацию и рекурсивную инициализацию с использованием следующей процедуры. Процедура предполагает, что объект Class уже был проверен и подготовлен, и что объект Class содержит состояние, которое указывает на одну из четырех ситуаций: Этот объект класса проверен и подготовлен, но не инициализирован. Этот объект класса инициализируется некоторым конкретным потоком T. Этот объект класса полностью иниц...