volatile关键字的作用
保证两个线程之间变量的可见性,
如果一个线程修改了某个变量,
另一个线程可以读到修改后的变量。
如:一个线程从主内存中读取某个变量到自己占用的cpu的缓冲区或内存,
然后对该变量进行操作,操作完之后再写入主内存,
过程中如果其他线程修改了此变量,其他已读取该变量的线程是不知道的。
加了volatile关键字后,如果变量被修改,会通知其他线程他们缓存的变量已经被修改,
需要从新去主内存中读取新的值。
volatile关键字并不能保证多个线程共同修改某个变量时所带来的不一致问题,
也就是说volitiy不能代替synchronized。
volatile只保证可见性。
synchronized既保证可见性,也保证原子性。
参考java内存模型http://www.cnblogs.com/nexiyi/p/java_memory_model_and_thread.html