Java Reference
In-Depth Information
Listing 3.3. Thread-safe Mutable Integer Holder.
3.1.2. Nonatomic 64-bit Operations
When a thread reads a variable without synchronization, it may see a stale value, but at least
it sees a value that was actually placed there by some thread rather than some random value.
This safety guarantee is called
out-of-thin-air safety
.
Out-of-thin-air safety applies to all variables, with one exception: 64-bit numeric variables
Model requires fetch and store operations to be atomic, but for nonvolatile
long
and
double
variables, the JVM is permitted to treat a 64-bit read or write as two separate 32-bit
operations. If the reads and writes occur in different threads, it is therefore possible to read a
Thus, even if you don't care about stale values, it is not safe to use shared mutable
long
and
double
variables in multithreaded programs unless they are declared
volatile
or
guarded by a lock.