美文网首页
第三十章、JAVA内存模型中的happen-before

第三十章、JAVA内存模型中的happen-before

作者: 小母牛不生产奶 | 来源:发表于2018-11-19 20:51 被阅读7次

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


    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 也成立。

    相关文章

      网友评论

          本文标题:第三十章、JAVA内存模型中的happen-before

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