AbstractQueuedSynchronizer::cancelAcquire(Node node, boolean interrupted, boolean interruptible) 源码笔记

// interruptible 为true表示当线程的interrupted标识位被置位时
// 返回一个负数;为false表示不返回一个负数,并重新置位一次interrupted标志位
private int cancelAcquire(Node node, boolean interrupted,
                            boolean interruptible) {
    if (node != null) {
        // 将与node绑定的线程
        // 将node 的状态设置为已取消
        node.waiter = null;
        node.status = CANCELLED;
        // 若node.prev != null则说明node已经被加入到等待队列
        // 此时由于node为CANCELLED状态,队列做一次清理
        if (node.prev != null)
            cleanQueue();
    }
    // 如果当前线程的interrupted被置位,则依照interruptible的值做相应的操作
    if (interrupted) {
        if (interruptible)
            return CANCELLED;
        else
            Thread.currentThread().interrupt();
    }
    return 0;
}

 

posted @ 2021-04-01 17:00  榆木脑袋0v0  阅读(181)  评论(0)    收藏  举报