Я читал о модели памяти Java и порядке «до и после», который налагает volatile
, и о возможном переупорядочении кода, которое может произойти без volatile
.Но предположим, что у меня есть класс Fun
с энергонезависимым полем, объявленным как private Cake c=new Cake();
, а затем в методе Fun
(скажем, public void eat() { ... }
) я использую c
, как если бы он не был нулевым.Я не могу найти ничего в документации или в StackOverflow, где указано, что c
гарантированно будет ненулевым, если eat
вызывается потоком, отличным от того, который вызвал конструктор Fun
.Так правда ли, что нет гарантии? документация , кажется, только гарантирует, что окончательные поля будут видны правильно после завершения конструктора.
Этот вопрос на самом деле больше из-за любопытства, так как я определенно собираюсь использовать volatile
дляперед заказом убедитесь, что все правильно.