天天看点

每天一道面试题,周五打卡冲冲冲!AQS的原理是什么?AQS(AbstractQueuedSynchronizer)的原理

作者:一个id

每天一道面试题,周五打卡冲冲冲!AQS 的原理是什么?

AQS(AbstractQueuedSynchronizer)的原理是基于一个FIFO(先进先出)队列和一个同步状态(state)来实现线程的排队和同步。

AQS的核心思想是,当线程尝试获取同步状态时,如果同步状态已经被其他线程占用,则将当前线程包装成一个节点(Node)并入队等待,否则直接获取同步状态。同时,AQS会确保只有队列中第一个节点的线程才能获取同步状态,其他节点需要等待前面的节点释放同步状态。

AQS的主要实现机制如下:

1. 内部队列:AQS维护一个FIFO队列,用于存储等待获取同步状态的线程。每个线程通过Node对象来表示,并包含了线程的引用和状态信息。

2. 同步状态(state):AQS内部维护一个同步状态,用于表示同步资源的状态。不同的同步器可以根据自己的需求使用同步状态来表示不同的含义,如锁的可重入次数、Semaphore的可用许可数等。

3. CAS操作:AQS使用CAS(Compare and Swap)操作来实现对同步状态的原子修改。CAS操作通过比较内存中的值与期望值,如果相等则进行修改,否则不进行修改。

4. 线程调度:AQS通过自旋(自旋锁)和阻塞(等待队列)两种方式来进行线程的调度。当线程无法获取同步状态时,会进入阻塞状态,直到被前面的节点唤醒。在自旋期间,线程会不断尝试获取同步状态,避免线程切换的开销。

#java #程序员 #学习打卡 #面试打卡

每天一道面试题,周五打卡冲冲冲!AQS的原理是什么?AQS(AbstractQueuedSynchronizer)的原理
每天一道面试题,周五打卡冲冲冲!AQS的原理是什么?AQS(AbstractQueuedSynchronizer)的原理
每天一道面试题,周五打卡冲冲冲!AQS的原理是什么?AQS(AbstractQueuedSynchronizer)的原理

继续阅读