美文网首页
Java 原子性,可见性

Java 原子性,可见性

作者: onemoremile | 来源:发表于2016-09-14 13:31 被阅读0次

    原子性:最小操作执行单元,不可中断分割。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 快,因为不需要做线程上下文切换。

    内存屏障

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

    相关文章

      网友评论

          本文标题:Java 原子性,可见性

          本文链接:https://www.haomeiwen.com/subject/hhuvettx.html