на все поля - это же не спасает от аномалий с неатомарными операциями в стиле ++ например, там уже нужно объявление synchronized (ну или понятное дело обётки из спец библиотеки). Или вот тут у меня срабатывает поверхностное понимание проблемы и всё не так?
Ну то есть волатайл гарантирует атомарную запись и чтение и это ок. Но операции инкремента и декремента посредством ++ — работают по иному вроде, и тут нам не поможет волатаил на все поля как мне кажется, но я уже и тут сомневаться начал
На ++ и -- надо использовать cas based примитивы: AtomicLong и ко. Это дешевле чем локи/sychnronized
я так и написал, только обозвал их обёртками. Главно что волатайла тут не хватит
Ага, даже SC-DRF не гарантирует, что багов не будет. Простой инкремент будет 2 операциями (чтение и запись в volatile-семантике), со всеми идущими из этого последствиями
Имхо, лучше VarHandle заиспользовать для volatile поля, особенно если внезапно потребовалось
Простой getAndIncrement или incrementAndGet по факту это будет одна инструкция lock add на x86_64
Обсуждают сегодня