AQS-节点的起始状态0是怎么来的,为什么要有0这个状态?

之所以初始化为0而不是-1,是为了在release()方法里去区分是否需要唤醒后继节点:

  1. if (h != null && h.waitStatus != 0)
  2. unparkSuccessor(h);

当前线程释放资源之后,去唤醒后继节点时,判断条件是!=0的,也就是说,对于一个没有后继节点的节点(状态为0就说明没有后继节点,因为如果有后继节点的话,前驱节点的状态就会被设置为-1)来说,是不需要去唤醒后继节点的

posted @ 2021-05-15 18:00  looyee  阅读(326)  评论(0编辑  收藏  举报