AQS原理

简介: AQS原理

AQS, AbstractQueuedSynchronizer ,抽象队列同步器,定义了一套多线程访问共享资源的同步器框 架,许多并发工具的实现都依赖于它,如常用的 ReentrantLock/Semaphore/CountDownLatch 。

AQS使用一个 volatile 的int类型的成员变量 state 来表示同步状态,通过CAS修改同步状态的值。当 线程调用 lock 方法时 ,如果 state =0,说明没有任何线程占有共享资源的锁,可以获得锁并将 state 加1。如果 state 不为0,则说明有线程目前正在使用共享变量,其他线程必须加入同步队列进行等待。

privatevolatileintstate;//共享变量,使用volatile修饰保证线程可见性

同步器依赖内部的同步队列(一个FIFO双向队列)来完成同步状态的管理,当前线程获取同步状态失败 时,同步器会将当前线程以及等待状态(独占或共享 )构造成为一个节点(Node)并将其加入同步队 列并进行自旋,当同步状态释放时,会把首节点中的后继节点对应的线程唤醒,使其再次尝试获取同步 状态。

image.png

相关文章
|
9月前
|
安全
架构系列——通过ReentrantLock源码分析给对象上锁的原理
架构系列——通过ReentrantLock源码分析给对象上锁的原理
|
5月前
|
存储 设计模式 算法
队列同步器AQS-AbstractQueuedSynchronizer 原理分析
队列同步器AQS-AbstractQueuedSynchronizer 原理分析
48 0
|
6月前
图解ReentrantLock底层公平锁和非公平锁实现原理
图解ReentrantLock底层公平锁和非公平锁实现原理
67 0
|
7月前
|
设计模式 Java API
终于弄懂AQS了
大家好,我是三友~~ 相信大家对Java中的Lock锁应该不会陌生,比如ReentrantLock,锁主要是用来解决解决多线程运行访问共享资源时的线程安全问题。那你是不是很好奇,这些Lock锁api是如何实现的呢?本文就是来探讨一下这些Lock锁底层的AQS(AbstractQueuedSynchronizer)到底是如何实现的。
|
7月前
AQS源码解读之一
AQS源码解读之一
23 0
|
10月前
|
Java 程序员 API
AQS 原理解读
AQS 原理解读
|
11月前
|
安全
AQS学习:ReentrantLock源码解析
AQS学习:ReentrantLock源码解析
40 0
|
12月前
|
Java 调度 容器
并发编程-15并发容器(J.U.C)核心 AbstractQueuedSynchronizer 抽象队列同步器AQS介绍
并发编程-15并发容器(J.U.C)核心 AbstractQueuedSynchronizer 抽象队列同步器AQS介绍
88 0
AQS(abstractQueuedSynchronizer)锁实现原理详解
AQS(abstractQueuedSynchronizer)抽象队列同步器。其本身是一个抽象类,提供lock锁的实现。聚合大量的锁机制实现的共用方法。
118 0
|
机器学习/深度学习 Java 调度
浅谈AQS原理
经典八股文之AQS原理
171 0