http://www.cnblogs.com/dolphin0520/p/3920373.html#!comments
其中2.volatile保证原子性吗?中的例子的问题,评论中15楼的回答个人感觉有道理,如下:
1、线程1读取inc的值后,还没有操作就被阻塞了。
2、线程2被唤醒,从主存读取inc的值,加1,然后被阻塞。(此时还没来得及把新的值重新赋值给inc,当然也还没同步到主存)
3、线程1被唤醒,inc值加1,然后同步到主存(线程1结束)
4、线程2被唤醒,把最新的值赋值给inc,同步到主存(此时线程2,inc的值在第2步时已经被处理过了,仅仅只是把新的值赋值给inc而已。这个时候是不会再去读取inc的缓存行的,虽然inc的缓存行此时已经无效了)
因此如果一个域的值依赖于它以前的值(如递增)或其值收到其他域的限制,则volatile无法起作用