Java锁相关概念的简单理解

作者: 右耳菌 | 来源:发表于2022-06-17 13:52 被阅读0次

    Java中锁的概念

    • 自旋锁:是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环

    • 乐观锁:假定没有冲突,在修改数据时如果发现数据和之前获取的不一致,则读最新数据,修改后重试修改

    • 悲观锁:假定会发生并发冲突,同步所有对数据的相关操作,从读数据就开始上锁

    • 独享锁(写):给资源加上写锁,线程可以修改资源,其他线程不能再加锁 (单写)

    • 共享锁(读):给资源加上读锁后只能读不能改,其他线程也只能加读锁,不能加写锁 (多读)

    • 可重入锁、不可重入锁:线程拿到一把锁之后,可以自由进入同一把锁所同步的其他代码,则为可重入锁。

    • 公平锁、非公平锁:争抢锁的顺序,如果是按先来后到,则为公平。

    几种重要的锁实现方式: synchronized、ReentrantLock、ReentrantReadWriteLock


    同步关键字 synchronized

    1、用于实例方法、静态方法时,隐式指定锁对象
    2、用于代码块时,显示指定锁对象
    3、锁的作用域:对象锁、类锁、分布式锁
    4、引申:如果是多个进程,怎么办?

    • 特性:可重入、独享、悲观锁
    • 锁优化:
      • 锁消除:(开启锁消除的参数:-XX:+DoEscapeAnalysis -XX:+EliminateLocks)
      • 锁粗化:JDK做了锁粗化的优化,但我们自己可从代码层面优化

    Note: synchronized关键字,不仅实现同步,JMM中规定,synchronized要保证可见性(不能够被缓存)。


    思考

    锁的思考

    》》》 锁是加在对象头上边的


    堆内存中的Java对象

    堆内存中的Java对象

    Mark Word

    Mark Word

    默认情况下JVM锁会经历: 未锁定->偏向锁->轻量级锁->重量级锁 这四个状态
    参考来源:

    轻量级锁

    轻量级锁

    重量级锁

    重量级锁

    偏向锁

    偏向锁

    锁的升级过程

    锁的升级过程

    tips: 锁没有降级的概念,只能是释放完之后改为未锁定状态


    如果觉得有收获就点个赞吧,更多知识,请点击关注查看我的主页信息哦~

    相关文章

      网友评论

        本文标题:Java锁相关概念的简单理解

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