volatile has semantics for memory visibility. Basically, the value of a
volatile field becomes visible to all readers (other threads in particular) after a write operation completes on it. Without
volatile, readers could see some non-updated value.
To answer your question: Yes, I use a
volatile variable to control whether some code continues a loop. The loop tests the
volatile value and continues if it is
true. The condition can be set to
false by calling a “stop” method. The loop sees
false and terminates when it tests the value after the stop method completes execution.
The book “Java Concurrency in Practice,” which I highly recommend, gives a good explanation of
volatile. This book is written by the same person who wrote the IBM article that is referenced in the question (in fact, he cites his book at the bottom of that article). My use of
volatile is what his article calls the “pattern 1 status flag.”
If you want to learn more about how
volatile works under the hood, read up on the Java memory model. If you want to go beyond that level, check out a good computer architecture book like Hennessy & Patterson and read about cache coherence and cache consistency.