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锁相关概念的简单理解

    Java中锁的概念 自旋锁:是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断...

  • ReentrantReadWriteLock了解

    Java锁概念 在讲这个类之前先简单说一下Java并发两个概念,共享锁,排他锁(独占锁)。共享锁就可以同时被多个线...

  • J.U.C源码阅读之AQS

    概念理解 1.AQS-- 指AbstractQueuedSynchronizer类。 AQS是java中管理“锁”...

  • Java中的乐观锁——无锁策略

    题主在阅读《实战Java高并发程序设计》一书时,了解到了Java无锁的相关概念,在此记录下来以加深对其的理解,Ja...

  • Java中的锁

    对Java中的锁做了简单的罗列总结,以便于后期回顾。 本文对如下概念进行了总结:锁的意义;锁的定义与实现;Java...

  • Java核心技术

    1. JVM相关 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解...

  • 锁的相关概念

    一、对象锁和类锁   给对象加锁(可以理解为给这个对象的内存上锁,注意只是这块内存,其他同类对象都会有各自的内存锁...

  • OC 多线程基础知识:锁

    想要深入理解多线程,锁是预备知识,这里总结一下OC中锁相关的知识,打好基础。 为什么要有锁? 锁概念的提出,是为了...

  • 2019大厂面试存疑

    Java相关 Java实现的锁有哪些synchornized实现的监视器锁、ReentrantLock、ReadW...

  • Java多线程初探

    本文列举了Java多线程相关的一些重要概念,作为后续系列文章索引。 Linux锁机制对比 spinlock: 自旋...

网友评论

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

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