(referenced from http://www.javamex.com/tutorials/synchronization_volatile.shtml)It's probably fair to say that on the whole, the volatile keyword in Java is poorly documented, poorly understood, and rarely used. To make matters worse, its formal definition actually changed as of Java 5. Essentially,volatile is used to indicate that a variable's value will be modified by different threads.
The author made a comparsion between volatile and synchronized, maybe it's worth of your reading.
rul:http://www.javamex.com/tutorials/synchronization_volatile.shtml