如果根据Effective Java的摘录,Java中int(整数)类型的变量本质上是原子性的,那么为什么我们会在以下示例中看到整数值的不一致状态:https://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html?
语言规范保证读取或写入变量是原子操作,除非变量是long或double类型[JLS, 17.4.7]。换句话说,读取除long或double之外的变量将返回某个线程存储到该变量中的值,即使多个线程同时并且没有同步地修改该变量,也可以保证如此。
以上条款对我来说是相互矛盾的。
语言规范保证读取或写入变量是原子操作,除非变量是long或double类型[JLS, 17.4.7]。换句话说,读取除long或double之外的变量将返回某个线程存储到该变量中的值,即使多个线程同时并且没有同步地修改该变量,也可以保证如此。
以上条款对我来说是相互矛盾的。