美文网首页
二、Java并发机制等底层实现原理

二、Java并发机制等底层实现原理

作者: 潇泠雪枫 | 来源:发表于2018-10-16 23:46 被阅读0次

    volatile 关键字

    volatile —— 轻量级 synchronized ,在并发编程中保证共享变量等“可见性”。

    可见性:当一个线程修改一个共享变量时,其他线程能够读到这个修改的值。

    volatile 不会引起线程上下文的切换和调度。

    1.1 volatile 的实现原则

        1)Lock 前缀指令(编译后生成)会引起处理器缓存回写到内存。

            总线锁定和缓存锁定。

    总线锁定:Lock前缀指令导致在指令执行期间声言处理器的 Lock# 信号,锁住总线,导致其他CPU不能访问总线。

    缓存锁定:若访问的内存区域已经缓存在处理器内部,则不会声言 Lock# 信号,会锁定这块内存区域的缓存并写会到内存,并使用缓存一致性机制确保修改的原子性。

        2)一个处理器的缓存回写到内存会导致其他处理器到缓存无效。

            处理器使用嗅探技术保证它的内部缓存、系统内存和其他处理器的缓存的数据在总线上保持一致。

    1.2 volatile 的使用优化

    LinkedTransferQueue通过追加字节将共享变量追加到64字节,与处理器的位数保持一致。避免头结点和尾结点加载到同一个缓存行,使头、尾结点在修改时不会相互锁定。

    使用 volatile 变量是否都应追加字节?

        不是,以下两种场景不应该使用该方式:

        1)缓存行非64字节宽到处理器

        2)共享变量不会被频繁地写

    volatile关键字详解


    Synchronized 的实现原理及应用

        synchronized —— 重量级锁,实现同步的基础:Java 中每个对象都可以作为锁。

        3种形式及锁对象:

                非静态方法:锁为当前实例对象

                静态方法:锁为当前类的Class对象

                同步方法块:锁为括号里配置的对象

        JVM 规范中可以看到 synchronized 实现原理,但两者但实现细节不同。

    分析1分析2

    相关文章

      网友评论

          本文标题:二、Java并发机制等底层实现原理

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