Java并发(十)

本文详细解析了Java并发中公平锁的实现原理,包括spinForTimeoutThreshold、parkNanos和cancelAcquire等关键步骤。通过判断等待时间、自旋、parking以及中断处理,确保线程公平地获取锁。最后总结了公平锁的流程和核心操作。
摘要由CSDN通过智能技术生成

//从下面这个判断可以判断出,这个抢锁过程是公平的

//如果上一个线程是头结点

//并且自己尝试获取锁成功

if (p == head && tryAcquire(arg)) {

//那么该线程就可以继续运行了

//先将头结点设为自己

setHead(node);

//断开与头结点的连接

//让头结点可以回收

p.next = null; // help GC

//failed为false代表自旋过程无出错

failed = false;

//自旋结束,返回true,回到上一层继续运行

return true;

}

//上一个不是头结点,或者虽然是头结点但抢不到锁

//计算还需要等待多长时间

nanosTimeout = deadline - System.nanoTime();

//如果没有时间剩余了

if (nanosTimeout <= 0L)

//返回false

//上一层处理

return false;

//还有时间剩余,看需不需要park

//这里一样是自旋两次,然后就会返回true,代表需要Park

//继续判断剩余时间是否足够进行park

//因为如果park需要的时间都要多于线程剩下的时间

//没什么必要park了,让其再自旋多一次,拿不到就超时返回false

if (shou Java开源项目【ali1024.coding.net/public/P7/Java/git】 ldParkAfterFailedAcquire(p, node) &&<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值