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