年底了我裁完兄弟自己也离职了,复习了Java锁的底层准备面试...

V-xin:ruyuanhadeng获得600+页原创精品文章汇总PDF

一、写在前面

上篇文章:《SpringBoot3.0都正式发布了,尝鲜之前先搞明白AQS底层再说!》聊了一下java并发包中的AQS的工作原理,也间接说明了ReentrantLock的工作原理。

这篇文章接着来聊一个话题,java并发包中的公平锁与非公平锁有啥区别


二、什么是非公平锁?

先来聊聊非公平锁是啥,现在大家先回过头来看下面这张图。

在这里插入图片描述

如上图,现在线程1加了锁,然后线程2尝试加锁,失败后进入了等待队列,处于阻塞中。然后线程1释放了锁,准备来唤醒线程2重新尝试加锁。

注意一点,此时线程2可还停留在等待队列里啊,还没开始尝试重新加锁呢!

然而,不幸的事情发生了,这时半路杀出个程咬金,来了一个线程3!线程3突然尝试对ReentrantLock发起加锁操作,此时会发生什么事情?

很简单!线程2还没来得及重新尝试加锁呢。也就是说,还没来得及尝试重新执行CAS操作将state的值从0变为1呢!线程3冲上来直接一个CA

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值