Действительно ли эти два эквивалентны? Другими словами, ++ и - атомарные операторы?
int i = 0;
return ++i;
AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();
Нет, ++ i
фактически представляет собой три инструкции (загрузка i
, увеличение, сохранение в i
). Это определенно не атомарно.
Операция ++ не является атомарной в java, потому что она состоит из трех операций
Таким образом, определенно может случиться что-то плохое между
В случае long это еще сложнее, потому что даже сама операция чтения не является атомарной.
Я нашел хорошую статью, в которой рассказывается о модели памяти
http://www.vogella.de/articles/JavaConcurrency/article.html#memorymodel_atomic