AQS设计思想笔记

1. AQS概述
  • 全称: AbstractQueuedSynchronizer
  • 目的: 提供一种用于构建锁和其他同步器的框架,用于控制对共享资源的访问。
2. 设计思想
  • 基于队列的同步器: AQS使用一个FIFO队列来管理那些线程在等待某个资源。
  • 公平性: 通过队列来确保先等待的线程先获得资源。
  • 灵活性: 允许开发者自定义同步器的更多行为。
3. 核心概念
  • state: 表示同步状态,通过CAS操作保证状态的原子性。
  • exclusiveOwnerThread: 记录当前持有独占锁的线程。
4. 资源抢占
  • CAS: 用于实现无锁的线程安全操作。
  • UNSAFE: 用于执行低级别的内存操作。
5. 同步队列
  • 双向链表: 所有等待的线程节点(Node)构成一个双向链表。
  • head和tail: 表示队列的头部和尾部,AQS主要操作这两个节点。
6. 线程阻塞与唤醒
  • LockSupport.park: 阻塞当前线程。
  • LockSupport.unpark: 唤醒指定线程。
7. 线程通信
  • Node结构: 包含线程引用(waiter)和状态(status),用于线程间的通信。
8. 被唤醒线程的行为
  • 再次尝试抢占: 被唤醒的线程会再次尝试获取资源,而不是直接获得资源。
9. Condition队列
  • await/signal: 类似于Object的wait/notify机制,用于线程间的协调。
10. 设计哲学
  • 从使用到理解: 初学者学习如何使用,进阶者理解原理,高手思考设计原因。
11. 总结
  • AQS是Java并发包的核心,理解其设计思想对于开发高性能并发应用至关重要。
  • 设计者通过AQS展示了如何用一种通用的方式来处理并发问题,提供了构建各种锁和其他同步器的灵活性。
相关推荐
骑着蜗牛撵大象3273 天前
C++20 协程 × 屏障:手写一个 co_await 版 Barrier,让等待不再钉死线程
android·c++20·协程·并发编程·co_await·屏障同步
AI人工智能+电脑小能手6 天前
一次请求打几个下游,这个Java并行任务工具类6个方法按序聚合
java·线程池·并发编程·1024程序员节·批量处理·并行任务
zzu123zsw9 天前
面对多 RPC 扇入超时崩溃:深入 asyncTool 核心 DAG 编排与线程池隔离防护
java·网络·spring boot·网络协议·rpc·并发编程
Thinker QAQ9 天前
并发编程(十一):Shared Memory 与 Message Passing——关系与组合使用
java·python·go·并发编程·shared memory·message passing
ly768911 天前
synchronized 与 AQS 锁竞争剖析:从锁升级到 CLH 队列的定位路径
synchronized·aqs·性能剖析·锁竞争·clh 队列
Thinker QAQ15 天前
并发编程(九):BlockingQueue 与 Channel——语言层的原子性、可见性与有序性
java·python·go·并发编程·channel·blockingqueue·message passing
范中勤15 天前
Python 协程(Coroutine)通俗讲解与技术原理:从 await 挂起到 Agent 高并发
python·agent·协程·并发编程·asyncio
范中勤18 天前
Python Asyncio 协程与 LLM 异步并发原理技术文档(与 Java 对比|彻底澄清所有误区)
python·llm·协程·并发编程·asyncio
code2cat19 天前
Java进阶篇之AtomicLongFieldUpdater:把累计额度留在对象字段中
java·cas·并发编程
deepseek2320 天前
SQLite WAL 开了仍报 database is locked?Python 后台任务的事务与幂等修复
数据库·python·sqlite·并发编程·wal