Hardjmmconcurrency
Что такое Java Memory Model (JMM)?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Java Memory Model (JSR 133, Java 5+) — спецификация взаимодействия потоков через memory: гарантирует видимость изменений и упорядочивание операций. Без JMM поведение было undefined (компилятор и CPU переупорядочивают инструкции).
class Flag {
private volatile boolean ready = false; // volatile — видимость + memory barrier
private int data;
void writer() { // поток 1
data = 42; // (1)
ready = true; // (2) volatile-запись
}
void reader() { // поток 2
if (ready) { // (3) volatile-чтение: видны все записи до (2)
assert data == 42; // guaranteed
}
}
}Ключевые понятия:
- happens-before — если A happens-before B, эффекты A видны B (через
synchronized,volatile,final,Thread.start,Thread.join); volatileгарантирует видимость, но не атомарность составных операций;- data race — два потока обращаются к non-final полю, хотя бы один пишет, без happens-before → undefined.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.