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展示了如何用一种通用的方式来处理并发问题,提供了构建各种锁和其他同步器的灵活性。
相关推荐
BestOrNothing_20153 天前
C++ 并发四件套:并发编程 / 原子性 / 数据竞争 / 内存模型 (全解析)
c++·多线程·并发编程·线程安全·内存模型·原子操作·数据竞争
蜂蜜黄油呀土豆4 天前
ThreadLocal 深度解析:它解决了什么、原理是什么、如何正确使用(含代码与实战建议)
java·并发编程·内存泄漏·threadlocal
逻极7 天前
Python并发实战:从线程混乱到优雅处理,我们如何将数据处理效率提升5倍
多线程·并发编程·异步io
better_liang10 天前
每日Java面试场景题知识点之-线程池配置与优化
java·性能优化·面试题·线程池·并发编程
小满、12 天前
MySQL :锁机制、InnoDB 架构与 MVCC 解析
数据库·mysql·innodb·mvcc·锁机制
后端小张1 个月前
【JAVA 进阶】重生之我要学会 JUC 并发编程
java·spring boot·spring·java-ee·并发编程·安全架构·juc
佛祖让我来巡山1 个月前
Java并发编程之Lock锁机制深度解析:从使用到源码实现
aqs·lock·condition·基于aqs实现自定义同步类
切糕师学AI2 个月前
【多线程】阻塞等待(Blocking Wait)(以C++为例)
c++·多线程·并发编程·阻塞等待
千码君20162 个月前
Go语言:记录一下Go语言系统学习的第一天
java·开发语言·学习·golang·gin·并发编程·编译语言
poemyang2 个月前
Goroutine间的“灵魂管道”:Channel如何实现数据同步与因果传递?
golang·并发编程