If I have code like this -
long x;
x = 0xFFFFFFFFL;
If i run this code on a 32 bit machine is it guaranteed to be atomic or is it po
If the variable is volatile, then the read/write is guaranteed atomic, but not if the variable is non-volatile.
Some implementations may find it convenient to divide a single write action on a 64-bit long or double value into two write actions on adjacent 32 bit values. For efficiency's sake, this behavior is implementation specific; Java virtual machines are free to perform writes to long and double values atomically or in two parts.
For the purposes of the Java programming language memory model, a single write to a non-volatile long or double value is treated as two separate writes: one to each 32-bit half. This can result in a situation where a thread sees the first 32 bits of a 64 bit value from one write, and the second 32 bits from another write. Writes and reads of volatile long and double values are always atomic.
JLS 17.7 - Non-atomic Treatment of double and long
When multiple threads are accessing a long value without synchronization, it is necessary to use volatile to ensure changes made by one thread are visible to other threads, and to ensure the read/write is atomic.