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