美文网首页
2020 0608 记录此时对synchronized的理解

2020 0608 记录此时对synchronized的理解

作者: 写代码的杰西 | 来源:发表于2020-06-08 15:42 被阅读0次

    synchronized每隔一段时间都会重新看一次,每次都有新的理解。随着工作经验的累积和代码量的积累,对synchronized的理解也一直在变。

    synchronized解决了什么问题?

    解决多线程并发访问同一段代码块或方法带来的同步问题。

    synchronized的底层原理

    每一个对象o在运行时都有一个监视器锁monitor。这个monitor也是一个对象,记录了当前持有对象o的线程,以及其他竞争的线程队列。当多个线程访问synchronized修饰的代码块时,会先执行monitorenter指令,尝试获取monitor。执行完代码块或者异常退出的时候,执行monitorexit指令,让monitor的当前占用线程指针指向null。如果monitor的当前占用线程不为空,则其他竞争资源的线程进入阻塞状态,等待占有线程释放了monitor以后,唤醒其他的等待线程去获取monitor。
    monitor的地址指针存在对象o的对象头里,在称之为markword的部分里
    jdk1.6以后对synchronized进行了优化,如果进入monitor的话, 称之为重量级锁。在锁升级到重量级锁之前,还有无锁、偏向锁、轻量级锁几个状态,状态存在对象头o的markword的锁标记位置。重量级锁是10

    相关文章

      网友评论

          本文标题:2020 0608 记录此时对synchronized的理解

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