Ответ 1
См. Раздел JLS 17.7: Неатомная обработка двойного и длинного
В целях модели памяти языка программирования Java однократная запись в энергонезависимое длинное или двойное значение рассматривается как два отдельные записи: по одной на каждую 32-битную половину. Это может привести к ситуация, когда поток видит первые 32 бита 64-битного значения из одна запись, а вторая 32 бита из другой записи.
Записи и чтения летучих длинных и двойных значений всегда являются атомарными.
Писания и чтения ссылок всегда являются атомарными, независимо от того, независимо от того, реализованы ли они как 32-битные или 64-битные значения.
В некоторых реализациях может оказаться удобным разделить одну запись действие на 64-битное длинное или двойное значение на два действия записи на смежные 32-битные значения. Для эффективности это поведение конкретная реализация; реализация виртуальной машины Java свободно выполнять записи в длинные и двойные значения атомарно или в две части.
Реализации виртуальной машины Java рекомендуется избегать разделяя 64-битные значения, где это возможно. Программистам предлагается объявлять общие 64-битные значения как изменчивые или синхронизировать их программы правильно, чтобы избежать возможных осложнений.
(добавлен акцент)