ReentrantLock源码问题

大家好,
(1)截图是ReentrantLock.lock()方法源码中,AQS的一个方法。
画圈的代码,和enq()方法中的代码重复。
画圈代码删了,只用enq()的逻辑可以吗?

(2)
局部变量,在返回前赋值,有用吗?


回答:

第一个问题,可以删除,不会导致任何问题。我的理解是,enq里边在大部分时候走的是更新尾元素这个分支,所以吧这个分支提前在addWaiter走一次。可能真的会在性能上好一点吧。

第二个问题,你那是一个 try finally结构,finally里的代码是肯定要执行的。


回答:

第一个问题:删除没有问题,算是一种优化吧,就像非公平锁获取锁一样,先进行一次CAS,之后是acquire,完全可以直接进入acquire方法;
第二个问题:算是异常退出的标识变量,在线程被打断后,会抛异常。为的是兼容可打断锁。

以上是 ReentrantLock源码问题 的全部内容, 来源链接: utcz.com/p/944149.html

回到顶部