Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
也就是说当多个线程中只有 i=10这种的赋值操作的时候用volatile才有意义,所以在很多情况下volatile都没用。我的建议是在不了解volatile的情况下不要使用,以免造成不良后果
这篇文章详细的介绍了,有兴趣的可以研究一下 http://www.ibm.com/developerworks/cn/java/j-jtp06197.html