- Может ли кто-нибудь объяснить Инициализация безопасности как требуется модель памяти Java?
- Как сделать окончательные полей помогают в достижении Инициализация безопасности?
- Какую роль выполняет конструктор играть в обеспечение Инициализация безопасности?
ответ
Безопасность инициализации обеспечивает возможность просмотра объекта внешним потоком в полностью сконструированном (инициализированном) состоянии. Предпосылкой является то, что объект не должен публиковаться преждевременно, т.е. в его конструкторе. Как только это будет обеспечено, JMM требует определенного поведения для полей, объявленных как final
. Во-первых, все final
поля объектные guarenteed быть увиденным наружной резьбой в его полностью инициализирован состоянии - это не так тривиально, как это звучит -
Рассмотрим класс
class A{
List list ;
A() {
list = Arrays.asList(some init expressions that adds 10 elements to list);
}
}
поток, который обращается к list
экземпляра A
не по умолчанию гарантированно увидит 10 элементов в этом списке. Фактически, этот поток может даже видеть list
как null
. Однако, если list
объявлен final
, то, как требуется JMM, list
должен всегда отображаться с использованием 10 элементов.
Во-вторых, эта гарантия инициализации не ограничивается самим полем final
, но рекурсивно распространяется на все объекты, переданные им. Например, если в приведенном выше примере list
представляет собой список самих list
, тогда внешний поток гарантированно будет видеть внутренние списки как полностью инициализированные.
Обратите внимание, что нигде мы не используем synchronized
для достижения этой безопасности в видимости памяти (происходит до отношения).
1. Инициализация безопасность позволяет правильно построены неизменных объектов для совместных безопасно потоков без использования синхронизации, независимо от того, даже если они опубликованы с помощью гонки данных.
2. Объектов, имеющие конечную область, безопасность инициализации предотвращают переназначения любой части конструкции с начальной нагрузкой ссылки на этот объект.
«независимо от того, даже если они опубликованы с использованием гонки данных». Эта линия не имеет никакого смысла. Объекты не публикуются с использованием расчётов данных :-). – Inquisitive
Я не уверен насчет «предотвращения переупорядочения любой части конструкции». Гарантии для окончательных полей вступают в силу только для инициализации этих окончательных полей, а не для других частей конструкции. – axtavt
@axtavt Фактическое переупорядочение предотвращается, если поле нестабильно не является окончательным. Итак, точка 2 неверна по мне. – Inquisitive
- 1. Java Наследование - пожалуйста, объясните
- 2. Безопасность инициализации в java
- 3. Java бит сдвиг ... пожалуйста, объясните
- 4. Пожалуйста, объясните Java + = и! = Операторы
- 5. Перенаправление строки в Java. Объясните пожалуйста?
- 6. Пожалуйста, объясните WebAuthenticationBroker
- 7. Является ли механизм рефлекса нарушением безопасности в java? Пожалуйста, объясните
- 8. Пожалуйста, объясните это поведение Python
- 9. Пожалуйста, объясните весну MVC, спящий режим и весеннюю безопасность
- 10. Пожалуйста, объясните мне «это»
- 11. Неожиданный выход. Пожалуйста, объясните
- 12. link_to логика объясните пожалуйста
- 13. Пожалуйста Объясните Deadlock Концепция
- 14. Java: Пожалуйста, объясните мне этот код.
- 15. Пожалуйста, объясните значение «java frame» из stacktrace?
- 16. Пожалуйста, объясните этот код обмена битами (Java)
- 17. Пожалуйста, объясните Java оператор^с примерами
- 18. рельсов BELONGS_TO has_many пожалуйста, объясните
- 19. Пожалуйста, объясните этот вывод программы Java
- 20. Java-арифметические операторы, пожалуйста, объясните вывод
- 21. Объясните, пожалуйста, утечку памяти в управляемом коде с примером?
- 22. Пожалуйста, объясните, как работает prog
- 23. Пожалуйста, объясните constexpr
- 24. Пожалуйста, объясните вывод sizeof()
- 25. Пожалуйста, объясните использование пакета
- 26. Пожалуйста, объясните расход/выход
- 27. Пожалуйста, объясните порядок наборов
- 28. Пожалуйста, объясните этот синтаксис
- 29. пожалуйста, объясните выход этого
- 30. C союз - пожалуйста, объясните
+1, отметив, что безопасность инициализации не только гарантирует безопасность для конечных полей, но также и для объектов, на которые ссылаются конечные поля. – Inquisitive