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

相关文章
|
3月前
|
存储 Java
JAVA并发编程AQS原理剖析
很多小朋友面试时候,面试官考察并发编程部分,都会被问:说一下AQS原理。面对并发编程基础和面试经验,专栏采用通俗简洁无废话无八股文方式,已陆续梳理分享了《一文看懂全部锁机制》、《JUC包之CAS原理》、《volatile核心原理》、《synchronized全能王的原理》,希望可以帮到大家巩固相关核心技术原理。今天我们聊聊AQS....
图解ReentrantLock底层公平锁和非公平锁实现原理
图解ReentrantLock底层公平锁和非公平锁实现原理
197 0
|
Java 程序员 API
AQS 原理解读
AQS 原理解读
AQS(abstractQueuedSynchronizer)锁实现原理详解
AQS(abstractQueuedSynchronizer)抽象队列同步器。其本身是一个抽象类,提供lock锁的实现。聚合大量的锁机制实现的共用方法。
156 0
|
Java API
图解ReentrantReadWriteLock读写锁的实现原理(上)
图解ReentrantReadWriteLock读写锁的实现原理
214 0
图解ReentrantReadWriteLock读写锁的实现原理(上)
图解ReentrantReadWriteLock读写锁的实现原理(下)
图解ReentrantReadWriteLock读写锁的实现原理
132 0
图解ReentrantReadWriteLock读写锁的实现原理(下)
|
算法 Java API
深入浅出理解Java并发AQS的共享锁模式
深入浅出理解Java并发AQS的共享锁模式
139 0
深入浅出理解Java并发AQS的共享锁模式
|
机器学习/深度学习 Java 调度
浅谈AQS原理
经典八股文之AQS原理
206 0
|
安全 Java
java并发原理实战(9)--手动实现一个可重入锁
java并发原理实战(9)--手动实现一个可重入锁
129 0
java并发原理实战(9)--手动实现一个可重入锁
|
安全 Java
Java并发之AQS源码分析(二)
我在 Java并发之AQS源码分析(一)这篇文章中,从源码的角度深度剖析了 AQS 独占锁模式下的获取锁与释放锁的逻辑,如果你把这部分搞明白了,再看共享锁的实现原理,思路就会清晰很多。下面我们继续从源码中窥探共享锁的实现原理。
156 0
Java并发之AQS源码分析(二)