zoukankan      html  css  js  c++  java
  • Java内存模型中happen-before原则

      Java 语言在设计之初就引入了线程的概念,以充分利用现代处理器的计算能力,这既带来了强大、灵活的多线程机制,也带来了线程安全等令人混淆的问题,而 Java 内存模型(Java Memory Model,JMM)为我们提供了一个在纷乱之中达成一致的指导准则。

     

    Happen-before 原则简单理解就是前一个操作的结果可以被后续的操作获取,是Java内存模型中定义的两项操作之间的偏序关系。 

    Happen-before 原则,是 Java 内存模型中保证多线程操作可见性的机制,也是对早期语言规范中含糊的可见性概念的一个精确定义。

    它的具体表现形式,包括但远不止是我们直觉中的 synchronized、volatile、lock 操作顺序等方面,例如:

    • 线程内执行的每个操作,都保证 happen-before 后面的操作,这就保证了基本的程序顺序规则,这是开发者在书写程序时的基本约定。

    • 对于 volatile 变量,对它的写操作,保证 happen-before 在随后对该变量的读取操作。

    • 对于一个锁的解锁操作,保证 happen-before 加锁操作。

    • 对象构建完成,保证 happen-before 于 finalizer 的开始动作。

    • 甚至是类似线程内部操作的完成,保证 happen-before 其他 Thread.join() 的线程等。

    这些 happen-before 关系是存在着传递性的,如果满足 a happen-before b 和 b happen-before c,那么 a happen-before c 也成立。

    前面我一直用 happen-before,而不是简单说前后,是因为它不仅仅是对执行时间的保证,也包括对内存读、写操作顺序的保证。仅仅是时钟顺序上的先后,并不能保证线程交互的可见性。

  • 相关阅读:
    DNSMAQ 搭建 DNS 服务
    kubernetes跨网段pod网络不通问题
    复制密钥到目标机器
    修改博客园css样式
    删除harbor项目下的所有镜像
    菜鸟 Python 100例
    清理日志
    UNIX基础--控制台和终端
    FreeBSD安装桌面环境
    Gentoo启动菜单设置:使用官方LiveDVD Grub主题
  • 原文地址:https://www.cnblogs.com/songgj/p/13269483.html
Copyright © 2011-2022 走看看