#java #multithreading #concurrency #classloader
#java #многопоточность #параллелизм #classloader
Вопрос:
В многопоточной среде, когда несколько потоков ссылаются на класс одновременно, загружает ли JVM класс в конечном итоге несколько раз?
Если нет, то как происходит синхронизация?
Комментарии:
1. Я не помню деталей (это есть в спецификации), но класс гарантированно будет загружен ровно один раз. JVM синхронизируется внутри.
2. Многопоточные загрузчики пользовательских классов в Java
3. Вы можете принять один ответ (если это вам поможет), нажав на большую серую кнопку проверки с левой стороны. При желании вы можете добавить 10 баллов любому автору любого хорошего ответа, щелкнув верхний серый треугольник
Ответ №1:
Класс будет загружен один раз. Смотрите jls 12.4.2
Для каждого класса или интерфейса C существует уникальная блокировка инициализации LC. Сопоставление с C на LC оставлено на усмотрение реализации виртуальной машины Java. Тогда процедура инициализации C выглядит следующим образом:
- Синхронизация с блокировкой инициализации, LC, для C. Это включает ожидание, пока текущий поток не сможет получить LC.
…
Комментарии:
1. В блоге Oracle рассказывается о процессе синхронизации после загрузки копии в основную память. Обеспечивает ли JVM синхронизацию на уровне загрузки, я имею в виду загрузку класса из classpath?