首先在来接syn锁之前,需要了解我们java中对象头的结构,对象头中包含objectheader,class work以及我们的markword,markword主要从初hashcode 分代年龄等信息,首先对于原始的syn锁,我们也叫他重量级锁,在对对象加锁的过程中,会调用native方法跟操作系统申请一个监视器对象,然后将二者关联起来,在关联的过程中,会讲对象头中的markword交给monitor管理,然后markword存储对应monitor的地址,方便我们后续加锁的时候寻址,syn锁是基于monitor实现的,他里面包含owner来存储thread对象,为null则表示当前没有线程获取锁,不为null则表示已经有人获取锁了,会进入到entryset中排队等待,当然如果获取锁的线程由于一些i蛀牙UN没有准备好,进入wait,会释放锁然后进入到waitset中等待,当其他持有锁的线程进行notify后会将waitset中线程放入到entryset中等待,这个set是无序集合,所以不确定哪个线程被调度后持所锁,所以syn是非公平锁,由于加锁每次都需要跟操作系统申请monitor,这个操作sh比较重的,所以jvm底层做了很多优化,比如:重量级锁的自旋,没获取到锁在重试几次,减少线程从运行变更为阻塞状态的上下文切换,还有就是轻量级锁,使用场景是不存咋锁竞争的情况,他会在当前thread staack中创建一个lock record记录,然后将lock record 和 对象头中的markword进行 cas交换,如果当前线程发生了锁重入,发现markword里面存的lockrecrd是当前线程会将所重入的lock 记录 方null,用来记录所重入的次数,释放锁则移除一个lock rerecord,后续如果发生锁竞争,还是会走cas操作尝试交换信息,结果发现已经被交换完了,说明发生了锁竞争就会走锁锁膨胀逻辑,变成重量级锁,然后本身持有轻量级锁的线程会走重量级锁的释放锁的流程.......当然如果不存在锁竞争的情况下,频繁发生自旋,每次都要cas操作,效率也比较低,底层做了优化,干脆直接把线程id刻到markword里面,这也就是偏向锁.......

相关推荐

09-09 18:14
门头沟学院 Java
0820一面项目:你的项目经验比较丰富,是实习项目还是学习项目?简单介绍一下你最值得说的一个项目。在项目开发中,你有没有遇到什么棘手的问题?你说到了对模型进行二次训练,当初有考虑过模型后训练这种方案么?你二次训练模型中构建的数据集,具体是怎么构建的?你在构建数据集的过程中,考虑到了哪些问题?你觉得在这个项目开发中,你最大的收获是什么?专业知识:用户在网页输入url,然后登陆系统进入个人中心,从客户端到服务器整个流程介绍一下。Java中的哈希函数你了解多少?如果让你去实现一个哈希函数,你该如何考虑?Java多线程threadpoolExcutor核心参数有哪些?实际开发中你如何设定核心线程数的?什么情况下会达到最大线程数?MySQL的索引有哪些种类?你说B+树索引有优势,优势在哪?你刚才说使用JWT构建token验证用户信息,那在分布式系统中如何实现?场景及手撕:来写几个MySQL语句吧。题目:给一个表table,字段有 student_id、subject_id、score;写出查询某个学生某个学科的成绩的SQL语句。写出查询某个学生的总分的SQL语句。对于上面两个SQL,从索引角度你该如何优化查询?MySQL中的DROP、DELETE、TRUNCATE三者区别是什么?峰值查找,给定一个数组,查找峰值数字的下标,使用logn时间复杂度。0825二面自我介绍拷打项目:各个项目的时间节点具体讲讲某个项目详细内容讲讲这个项目的难点八股:讲一讲TCP拥塞控制ICMP协议讲一下讲讲Java中的继承和接口的区别Java17新特性了解哪些线程池中,submit和excute的区别有哪些我看你有大模型使用经验,介绍一下transformerMySQL中的存储引擎介绍一下覆盖索引讲讲索引最左匹配原则了解么Redis实现找出前十名成员用什么数据结构比较合适Redis主从模式了解多少介绍一下springbootbean的作用域有哪些RPC了解么,介绍一下RPC序列化敲代码:写一下工厂模式结构吧写一个SQL查询吧(使用select、where、group by、having、count等完成查询)聊天:你认为自己是个什么样的人你觉得别人对你的评价如何你平时有没有学习哪些新知识你有没有对学习的知识进行系统性地整理和总结你的个人职业规划是什么样的反问:后续流程如能进入需要提升哪些方面0901 录用意向书
点赞 评论 收藏
分享
08-31 10:57
门头沟学院 Java
投递阿里巴巴灵犀互娱等公司10个岗位
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务