AQS是什么全称,它的工作原理和作用是什么?
- 内容介绍
- 文章标签
- 相关推荐
本文共计655个文字,预计阅读时间需要3分钟。
概念:AQS是多线程同步器,它是JUC包中多个组件的底层实现,例如lock、countDownLatch、Semaphore等都用到了AQS。AQS提供了两种锁机制:分别是排队锁和共享锁。排队锁就是多个线程对同一资源进行加锁时,会按照一定的顺序排队等待,只有前一个线程释放锁后,下一个线程才能获得锁。共享锁允许多个线程同时访问同一资源,但每个线程都必须在访问完毕后释放锁。
概念:aqs是多线程同步器,他是juc包中多个组件的底层实现,比如lock、countDownLatch、Semaphore都用到了AQS,aqs提供了两种锁的机制分别是排他锁和共享锁。排它锁就是多个线程对同一共享资源进行竞争的时候,只允许一个线程访问,如lock中的ReentrantLock重入锁。共享锁也成为读锁,就是在多个线程在同一时刻获得这个锁的资源如CountDownLatch、Semaphore。
三个核心:
-
互斥变量的设计:有一个status变量记录锁状态。0代表没有线程持有锁,大于等于1代表已经有线程持有锁资源。
-
未竞争到锁的线程等待,以及竞争到锁资源释放锁之后的唤醒:未竞争到锁先看队列中有没有节点,没有aqs会生成两个节点(一个空节点状态为0且owner为null,一个放刚刚来的线程)。如果对列中有节点那么尾部插入。竞争到锁之后:重入问题、锁状态为恢复为0、唤醒队列中等待的线程。
本文共计655个文字,预计阅读时间需要3分钟。
概念:AQS是多线程同步器,它是JUC包中多个组件的底层实现,例如lock、countDownLatch、Semaphore等都用到了AQS。AQS提供了两种锁机制:分别是排队锁和共享锁。排队锁就是多个线程对同一资源进行加锁时,会按照一定的顺序排队等待,只有前一个线程释放锁后,下一个线程才能获得锁。共享锁允许多个线程同时访问同一资源,但每个线程都必须在访问完毕后释放锁。
概念:aqs是多线程同步器,他是juc包中多个组件的底层实现,比如lock、countDownLatch、Semaphore都用到了AQS,aqs提供了两种锁的机制分别是排他锁和共享锁。排它锁就是多个线程对同一共享资源进行竞争的时候,只允许一个线程访问,如lock中的ReentrantLock重入锁。共享锁也成为读锁,就是在多个线程在同一时刻获得这个锁的资源如CountDownLatch、Semaphore。
三个核心:
-
互斥变量的设计:有一个status变量记录锁状态。0代表没有线程持有锁,大于等于1代表已经有线程持有锁资源。
-
未竞争到锁的线程等待,以及竞争到锁资源释放锁之后的唤醒:未竞争到锁先看队列中有没有节点,没有aqs会生成两个节点(一个空节点状态为0且owner为null,一个放刚刚来的线程)。如果对列中有节点那么尾部插入。竞争到锁之后:重入问题、锁状态为恢复为0、唤醒队列中等待的线程。

