Ответ вслух Senior Потоки и Java Memory Model обновлено

Java Memory Model

Вопрос

Что такое Java Memory Model и зачем она нужна? Расскажите про happens-before на примерах.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Процессоры имеют кеши и буферы записи, а компилятор и процессор переставляют инструкции ради скорости. В одном потоке это незаметно, а между потоками запись может не стать видимой или стать видимой в другом порядке.

Что должно прозвучать в ответе

  • Процессоры и JIT кешируют и переставляют операции

  • JMM определяет, какие записи видны другому потоку

  • Правила happens-before: монитор, volatile, start, join, транзитивность

  • Data race: несинхронизированный доступ с записью

  • final-поля и безопасная публикация

  • Пример: флаг остановки или DCL

Что могут спросить следом

  • Зачем нужны final-поля для неизменяемых объектов?
  • Что такое безопасная публикация объекта?
  • Как VarHandle связан с JMM?

Разбор

Процессоры имеют кеши и буферы записи, а компилятор и процессор переставляют инструкции ради скорости. В одном потоке это незаметно, а между потоками запись может не стать видимой или стать видимой в другом порядке. JMM задаёт правила, когда видимость гарантирована: отношение happens-before. Основные правила: внутри потока порядок программы, отпускание монитора перед последующим захватом того же монитора, запись volatile перед последующим чтением, start перед кодом потока, код потока перед возвратом из join, и всё это транзитивно. Если доступы к переменной из разных потоков не связаны happens-before и есть запись, это data race. Пример: флаг остановки без volatile, и цикл может не завершиться никогда. Другой пример: DCL без volatile, когда поток видит ссылку на недостроенный объект. Отдельно гарантия для final-полей: после конструктора они видны всем потокам, если this не утёк, на этом держатся неизменяемые объекты.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме