![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程学习笔记
文章平均质量分 79
大老李superLi
这个作者很懒,什么都没留下…
展开
-
synchronized加锁流程 从偏向锁到重量级锁
加锁流程图对象头介绍Java对象的内存布局分为三个部分:对象头、实例数据和对其填充。其中对象头又分为两部分使用64bits:用于存储对象自身运行时的数据——Mark Word(32bits)和类型指针,即指向它的类型元数据的指针——Klass Word(32bits)。使用synchronized进行对象锁的同步控制需要用到对象头中的Mark Word,从偏向锁膨胀到重量级锁的过程中,每一步都涉及了Mark Word的改变。初始(没有成为锁的时候)Mark Word会使用25bits记录has..原创 2020-07-02 11:44:35 · 1181 阅读 · 1 评论 -
ReentrantLock非公平锁加锁流程以及源码解读
1、类图2、NonfairSync结构3、流程图4、重要方法源码解读lock()final void lock() { //尝试用cas将state设置为1,设置成功则将exclusiveOwnerThread指向当前线程 if (compareAndSetState(0, 1)) setExclusiveOwnerThread(Thread.currentThread()); else //cas设置state失败,说明原创 2020-07-01 12:44:19 · 246 阅读 · 0 评论