并发

j.u.c.locks.AbstractQueuedSynchronizer.Node

AQS是JUC当中最核心的部分,大部分多线程讲解,都不会详细讲AQS,AQS的源代码,要看明白还是有点困难的。但是一旦看明白了,结构还是蛮清晰的。这里我们把AQS拆开,分成几部分来讲,就会很清楚了。首先先从内部类Nde讲起上源代码:static final class Node { &nb

AQS是JUC当中最核心的部分,大部分多线程讲解,都不会详细讲AQS,AQS的源代码,要看明白还是有点困难的。但是一旦看明白了,结构还是蛮清晰的。这里我们把AQS拆开,分成几部分来讲,就会很清楚了。首先先从内部类Nde讲起

上源代码:

static final class Node {
        static final int CANCELLED =  1;
        static final int SIGNAL    = -1;
        static final int CONDITION = -2;
        static final Node SHARED = new Node();
        static final Node EXCLUSIVE = null;

        volatile int waitStatus;

        volatile Node prev;

        volatile Node next;

        volatile Thread thread;

        Node nextWaiter;

        final boolean isShared() {
            return nextWaiter == SHARED;
        }

        final Node predecessor() throws NullPointerException {
            Node p = prev;
            if (p == null)
                throw new NullPointerException();
            else                return p;
        }

        Node() {    // Used to establish i

原创不易,完成人机校验,阅读全文

相关推荐