非公平锁:
首先会在 lock方法调用加锁的时候去抢锁(公平锁调用lock不会上来就去拿锁)
如果加锁失败则去看为什么失败(是否锁被人持有),在判断的时候如果锁没有被人持有非公平锁就会直接去加锁(不会判断是否有人排队),成果则进入同步块,失败则park(真正的排队)
公平锁:
第一次加锁的时候,他不会去尝试加锁,它回去看一下前面有没有人排队没如果有人排队,则进入队列(并不等于排队),然后还不会立刻等待,还会再次看一下有没有拿锁的资格(前面的元素是否为 head),如果有资格(前面那个人正好是head)则继续拿锁,成功则执行同步块;失败则park(排队)
最后修改于 2020-09-08 17:08:27
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

