简单说说你对Java内存模型的原子性的了解吧?

    Java内存模型保证non-long、non-double类型外的其余任意类型的访问都是原子性的。同时volatile long、volatile double访问也是原子性的。java

 

参考资料:多线程

同步和Java内存模型 (二)原子性并发

除了long型字段和double型字段外,java内存模型确保访问任意类型字段所对应的内存单元都是原子的。这包括引用其它对象的引用类型的字段。此外,volatile long 和volatile double也具备原子性 。(虽然java内存模型不保证non-volatile long 和 non-volatile double的原子性,固然它们在某些场合也具备原子性。)(译注:non-volatile long在64位JVM,OS,CPU下具备原子性)atom

当在一个表达式中使用一个non-long或者non-double型字段时,原子性能够确保你将得到这个字段的初始值或者某个线程对这个字段写入以后的值;但不会是两个或更多线程在同一时间对这个字段写入以后产生混乱的结果值(即原子性能够确保,获取到的结果值所对应的全部bit位,所有都是由单个线程写入的)。可是,以下面(译注:指可见性章节)将要看到的,原子性不能确保你得到的是任意线程写入以后的最新值。 所以,原子性保证一般对并发程序设计的影响很小。线程

相关文章
相关标签/搜索