0

ReentrantLock解析

2024.10.11 | cuithink | 78次围观

AQS概述

AQS就是AbstractQueuedSynchronizer抽象类,AQS其实就是JUC包下的一个基类,JUC下的很多内容都是基于AQS实现了部分功能,比如ReentrantLock,ThreadPoolExecutor,阻塞队列,CountDownLatch,Semaphore,CyclicBarrier等等都是基于AQS实现。


首先AQS中提供了一个由volatile修饰,并且采用CAS方式修改的int类型的state变量。


其次AQS中维护了一个双向链表,有head,有tail,并且每个节点都是Node对象


static final class Node {
        static final Node SHARED = new Node();
        static final Node EXCLUSIVE = null;

        static final int CANCELLED =  1;
        static final int SIGNAL    = -1;
        static final int CONDITION = -2;

        static final int PROPAGATE = -3;


        volatile int waitStatus;


        volatile Node prev;


        volatile Node next;


        volatile Thread thread; 
}


AQS内部结构和属性


加锁流程:

reentrantlock加锁流程图.png

粤ICP备16076548号
发表评论