ReentrantLock的加锁流程是怎么样的?
1 个回答
自己喜欢的东西,就不要问别人好不好。粑粑ReentrantLock非公平锁的加锁流程: 1.尝试着使用CAS操作将锁的状态state由0修改为1,修改成功则线程获得锁。 2.不成功就会再次尝试去抢锁,以及判断这个线程是否是当前持有锁的线程(如果是只需要将state+1,代表锁重入)。 3.抢锁没成功,也不是持有锁的线程,那么就会添加到等待队列然后调用Lock.Support.park()方法进行阻塞等待,然后被唤醒。  公平锁加锁过程: 1.如果当前锁没有被其他线程持有,并且等待队列中也没有其他线程等待,那么就使用CAS操作去抢锁。 2.或者线程就是当前持有锁的线程,那么就对state+1,代表锁重入。 3.以上情况都不是,就加入到等待队列进行等待。 非公平锁解锁流程  [https://blog.csdn.net/qq_14996421/article/details/102967314](https://blog.csdn.net/qq_14996421/article/details/102967314) [https://blog.csdn.net/fuyuwei2015/article/details/83719444](https://blog.csdn.net/fuyuwei2015/article/details/83719444)发布于 2022-02-16 23:45 •IP属地 河北举报评论收藏
公众号进入网站体验更佳

