Volatile Vs Atomic

Vaibhav picture Vaibhav · Nov 2, 2013 · Viewed 112.7k times · Source

I read somewhere below line.

Java volatile keyword doesn't means atomic, its common misconception that after declaring volatile, ++ operation will be atomic, to make the operation atomic you still need to ensure exclusive access using synchronized method or block in Java.

So what will happen if two threads attack a volatile primitive variable at same time?

Does this mean that whosoever takes lock on it, that will be setting its value first. And if in meantime, some other thread comes up and read old value while first thread was changing its value, then doesn't new thread will read its old value?

What is the difference between Atomic and volatile keyword?

Answer

Louis Wasserman picture Louis Wasserman · Nov 2, 2013

The effect of the volatile keyword is approximately that each individual read or write operation on that variable is atomic.

Notably, however, an operation that requires more than one read/write -- such as i++, which is equivalent to i = i + 1, which does one read and one write -- is not atomic, since another thread may write to i between the read and the write.

The Atomic classes, like AtomicInteger and AtomicReference, provide a wider variety of operations atomically, specifically including increment for AtomicInteger.