Java 原子性,可见性

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


内存屏障

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,466评论 11 349
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 9,137评论 0 11
  • Java SE 基础: 封装、继承、多态 封装: 概念:就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽...
    Jayden_Cao阅读 6,411评论 0 8
  • 前天晚上爸爸妈妈问我脚还疼不疼?我说走路不疼,一摁就疼。爸爸说明天中午放学之后让妈妈带我去医院。今天中午放学的之后...
    唐康凯阅读 1,306评论 0 0
  • 工厂方法模式,是设计模式初学者入门的模式,有人称它为最为典型最具启发效果的模式。 Android中用到了太多的工厂...
    博为峰51Code教研组阅读 1,391评论 0 0