Описание тега java-memory-model

Модель памяти Java (JMM) описывает, какие исполнения программы допустимы, путем определения того, какие значения могут наблюдаться при чтении общей переменной в соответствии с определенными правилами.

Выполнение однопоточной программы интуитивно понятно, поскольку оно следует порядку выполнения программы (т. Е. Порядку, в котором операторы размещены в исходном коде).

Однако, когда программа использует несколько потоков и эти потоки совместно используют информацию, порядок выполнения может стать неинтуитивным из-за переупорядочения инструкций, частично построенных объектов, одной и той же переменной, имеющей разные значения в разных потоках из-за кэширования на уровне ЦП и т. Д.

Модель памяти Java (JMM) описывает, какие исполнения программы допустимы, путем определения того, какое значение (значения) можно наблюдать при чтении общей переменной в соответствии с определенными правилами, которые определены в главе 17 Спецификации языка Java (JLS)., более конкретно в разделе 17.4.