大家好,
我跟踪lock.lockInterruptibly()方法时,对这个方法的实现有疑问
finally {
if (failed)
cancelAcquire(node);
}
当head -> pre -> current -> next时,代码来到这里
else {
unparkSuccessor(node);
}
我觉得应该把pre和next连接就行了,但是unparkSuccessor方法并没有这样做。是不是遗漏了这个case ? 本来是current中断,为什么需要unpark(next) ?
关注这么几天,一个参与讨论的都没有
-_-
。其实你说的pre和next连接是做了的。
比如这段,就在cancelAcquire中。
如果是tail,直接就把pred设置为tail,如果设置成功,直接把next设置为null。
下面的大概意思是,如果上节点不是头,同时处于信号阶段,或者可以转为信号阶段,并且有可执行线程。也是把pred的next设置为node.next(),这个操作是做了的。