# TinyLock **Repository Path**: zhousvessel/tiny-lock ## Basic Information - **Project Name**: TinyLock - **Description**: AQS是Java并发的核心,本项目通过模拟AQS的源码,实现了一个公平互斥锁;通过链表维护等待锁的线程序列,调用JVM提供的Unsafe类来实现CAS以及线程的调度; - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-11-11 - **Last Updated**: 2025-11-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TinyLock #### 介绍 AQS(`AbstractQueuedSynchronizer`)是Java并发的核心,本项目通过模拟AQS的源码,实现了一个公平互斥锁;通过链表维护等待锁的线程序列,调用JVM提供的`Unsafe`类来实现`CAS`以及线程的调度; #### 软件架构 本项目模仿Java并发核心`AbstractQueuedSynchronizer`类的实现,通过`volatile`修饰及CAS操作来原子化操作核心变量: - `state`,并发状态,0为unlock,1为locked - 等待队列,`head`,`tail`分别指向链表的头与尾 - 可重入相关变量,`owner`、`holdCount` 当线程尝试lock时,可能发生以下两种情况: 1. state>0,先通过CAS修改state状态,获取锁 2. state=0,调用`unsafe`类的`park`函数挂起当前线程,等待解锁 当线程尝试`unlock`时,释放`state`变量,唤醒等待队列的队头Node中的线程; #### 安装教程 通过Java IDE打开本项目,函数入口在test目录下`BootStrap`类中,其中是可重入互斥锁`TinyLock`对应的测试用例 #### 使用说明 ~~~java TinyLock lock = new TinyLock(); //新建互斥锁 lock.lock(); //加锁 lock.release(); //解锁 ~~~ BootStrap类下面创建了三个关于锁的测试用例: 1. 多线程并发-互斥锁串行执行 2. 双线程交替输出奇偶数 3. 线程可重入验证