Volatile variables
The JVM offers a more lightweight form of synchronization than the synchronized
block, called volatile variables. Volatile variables can be atomically read and modified, and are mostly used as status flags; for example, to signal that a computation is completed or cancelled. They have two advantages. First, writes to and reads from volatile variables cannot be reordered in a single thread. Second, writing to a volatile variable is immediately visible to all the other threads.
Note
Reads and writes to variables marked as volatile are never reordered. If a write W
to a volatile v
variable is observed on another thread through a read R
of the same variable, then all the writes that preceded the write W
are guaranteed to be observed after the read R
.
In the following example, we search for at least one !
character in several pages of the text. Separate threads start scanning separate pages p
of the text written by a person that is particularly fond of a popular fictional hero...