• jdk1.6以上版本对synchronized优化


    锁优化

    自适应的自旋锁

    自旋锁,为了让线程等待,让线程执行一个忙循环(自旋)。超过10次仍然没有成功获取锁,线程挂起。

    自适应的自旋锁,前一次在同一个锁上的自旋时间和锁的拥有者的状态决定。在同一个锁对象上,自旋等待刚刚成功获得过锁,并且持有锁的线程正在进行中,那么虚拟机就会认为这次自旋也很有可能再次成功,进而它将允许自旋等待持续相对更长的时间,比如100个循环。另一方面,如果对于某个锁,自旋很少成功获得过,那在以后获取这个锁时将可能省略掉自旋过程,以避免浪费处理器资源。

    锁粗化

    JVM检测一串操作都对同一对象加锁,把加锁同步的范围粗化到整个操作序列的外部。

    锁消除

    JVM在JIT编译运行时,通过对运行上下文的扫描,去除不可能存在共享数据竞争的锁。判断依据逃逸分析,判断堆上的数据不会被其它线程访问,那么把它们当做栈上的数据对待,认为它们是私有,同步加锁自然无须进行。

    轻量级锁

    jdk6引入。对于绝大部分锁,在整个生命周期内不会存在竞争。没有竞争,使用CAS消除互斥量。

    偏向锁

    jdk6引入。对于绝大部分锁,在整个生命周期内不会存在竞争,并且总由同一个线程多次获得。这个锁偏向第一个获取它的线程,如果接下来的执行中,该锁没有被其它的线程获取,则持有偏向锁的线程永远不需要再进行同步。

    优化synchronized后锁状态级别由低到高顺序:

    1. 无锁
    2. 偏向锁
    3. 轻量锁
    4. 重量锁

    https://www.jianshu.com/p/b516a981a1a7

  • 相关阅读:
    出差归来
    五一假期的开端
    哭。。。五一这就过拉。。。还没什么感觉那。。。呜呜
    爱姬家族新成员。。。
    大道至简读后感
    假期进度报告
    假期报告
    假期进度报告
    假期进度报告
    假期进度报告
  • 原文地址:https://www.cnblogs.com/ivy-xu/p/12588169.html
Copyright © 2020-2023  润新知