Я прочитал из Effective Java , что при отсутствии синхронизации следующая последовательность A ниже может быть преобразована виртуальной машиной в последовательность B, и это называется hoisting
. Я также где-то читал, что если переменные не объявлены как volatile, инструкции, включающие переменные, могут быть переупорядочены. Подъем и переупорядочивание — одно и то же?
while (!done) sequence A
i++;
if (!done)
while (true) sequence B
i++;