Java 原子性,可见性

2016-09-14  本文已影响0人  onemoremile

原子性:最小操作执行单元,不可中断分割。int类型是原子的,long不一定是,因为long的赋值是两次赋值才能完成,

对于32位操作系统来说,单次操作能处理的最长长度为32bit,而long类型8字节64bit,所以对long的读写都要两条指令才能完成(即每次读写64bit中的32bit)。如果JVM要保证long和double读写的原子性,势必要做额外的处理。

JVM规范中,没有规定一定要原子性,32位的HotSpot没有把long和double的读写实现为原子操作。

对于64big的环境来说,单次操作可以操作64bit的数据,即可以以一次性读写long或double的整个64bit,所以是原子的。

可见性:是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。volatile变量修饰保证了可见性,但不能保证原子性。  某些需要同步的场景,若可用volatile,它比synchronized 快,因为不需要做线程上下文切换。

内存屏障

内存屏障,又称内存栅栏,是一组处理器指令,用于实现对内存操作的顺序限制

上一篇下一篇

猜你喜欢

热点阅读