并发编程艺术-3

作者: e86dab508bc1 | 来源:发表于2018-04-14 12:29 被阅读0次

    本文主要简单介绍Java 内存模型的基础和相关概念,重排序和顺序一致性内存模型,同步原语 synchronized,volatile和final。

    JAVA 线程之间通过java内存模型(JMM)控制


    java内存抽象结构.png

    从源代码到指令序列的重排序:

    image.png

    在不改变程序正确执行的结果前提下,尽可能地为编译器和处理器的优化打开方便之门。

    1. volatile变量:
      可见性:总能看到变量的最后的写入
      原子性 : 对读/写具有原子性,但是 读写改就没有原子性了。

    使用volatile修饰, 通过插入内存屏障,保证了程序语义的正确执行。

    1. Synchronized: 当线程获得锁时,JMM会将线程对应的本地内存置为无效,从而使得监视器保护的临界区必须从主内存中读取共享变量。

    对比锁的释放和获取,锁的释放与volatile变量的写有相同的内存语义,锁的获取和volatile 变量的读有相同的内存语义。

    本质上面就是两个线程之间的消息通信,但是通信路径加上保证,而CAS(读改写)同时具有了volatile 读和写的内存语义。这是整个concurrency包的基石:


    1. final 域 : 禁止将final 域的写重排序到构造函数之外。

    下面是一段有问题的代码段,大家可以提出说说原因和提出解决方案:

    相关文章

      网友评论

        本文标题:并发编程艺术-3

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