java面试题10:AQS
时间: 2024-03-24 13:34:59 浏览: 163
AQS(AbstractQueuedSynchronizer)是Java中用于实现同步器的一个抽象类。它提供了一种基于FIFO等待队列的同步机制,可以用来构建各种类型的同步器,如锁、信号量、倒计时门栓等。
AQS的核心思想是使用一个volatile的int类型变量state来表示同步状态,通过CAS操作来实现对state的原子更新。AQS维护了一个等待队列,用于存放等待获取同步状态的线程。当一个线程尝试获取同步状态时,如果发现state不符合条件,则会将当前线程加入到等待队列中,并进入阻塞状态。
AQS提供了两种方式来实现同步器:
1. 独占模式:只有一个线程能够获取同步状态,如ReentrantLock就是基于独占模式实现的。
2. 共享模式:多个线程可以同时获取同步状态,如Semaphore就是基于共享模式实现的。
AQS的具体实现方式是通过内部类Node来表示等待队列中的节点,每个节点包含了等待线程的引用和等待状态。AQS提供了一些方法供子类实现具体的同步逻辑,如acquire、release等。
相关问题
java aqs面试题
Java AQS是Java并发编程中的一个重要组件,全称为AbstractQueuedSynchronizer。它通过实现一些基本的同步器来帮助我们实现线程间的同步。在Java中,ReentrantLock、Semaphore、CountDownLatch等常用的同步器都是基于AQS实现的。
以下是一些常见的Java AQS面试题:
1. 什么是AQS?
2. AQS的作用是什么?
3. AQS的核心思想是什么?
4. AQS中的state和队列分别代表什么含义?
5. AQS中的模板方法acquire和release是什么作用?
6. 如何使用AQS实现一个可重入锁?
7. AQS如何实现公平锁和非公平锁?
8. 你知道哪些基于AQS实现的同步器?
阅读全文