A.Q.S源码分析(释放锁)

来源:互联网 发布:ubuntu搭建服务器 编辑:程序博客网 时间:2024/05/16 11:12

锁释放的逻辑很简单,都是唤醒后继线程,但并不会把队列中对应的节点释放掉,释放的任务有下个加锁成功的线程负责:

exclusive:

public final boolean release(int arg) {        if (tryRelease(arg)) {            Node h = head;            if (h != null && h.waitStatus != 0)                unparkSuccessor(h);            return true;        }        return false;    }

shared:

public final boolean releaseShared(int arg) {        if (tryReleaseShared(arg)) {            doReleaseShared();            return true;        }        return false;    }

doReleaseShared()的作用就是唤醒后继线程。

0 0