synchronized不能保证原子性吗?

看到书上对于原子性的定义是这样:不会有中间状态存在,要么什么都没改变,要么全都改变。那既然synchronized保证了原子性,(方法执行完在刷回主存)那为什么我其他线程能读取到同步代码块的中间状态?

关于synchronized的介绍你可以看看:java并发编程之synchronized
你说能读到中间状态,我猜你读的操作和其他线程的操作不是同一个临界区,必须要在同一个临界区内进行操作才能保证线程的安全。