【juc】AQS是什么

[复制链接]
发表于 2025-11-15 08:42:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1. 分析



  • 1.AQS是AbstractQueuedSynchronizer的简称,即抽象的队列式同步器,也可以称作队列同步器。
  • 2.它是Java并发包(java.util.concurrent)中的一个紧张工具类,为Java并发同步组件提供同一的底层支持。
  • 3.AQS界说了一套多线程访问共享资源的同步器框架,通过维护一个共享资源状态(通常是一个volatile修饰的int变量)和一个先辈先出(FIFO)的线程期待队列来实现多线程对共享资源的同步访问。
  • 4.它实现了同步器的焦点逻辑,包罗资源的获取、开释以及线程的期待、唤醒等。
  • 5.AQS是Java并发包中的一个焦点组件,为多线程访问共享资源提供了同一的底层支持。
  • 6.它界说了两种资源共享方式,并通过CLH队列锁实现了线程壅闭期待以及被唤醒时锁分配的机制。
  • 7.自界说同步器只需实现共享资源state的获取与开释方式,而具体的线程期待队列维护则由AQS在顶层实现。
  • 8.AQS在Java并发编程中具有广泛的应用和紧张的职位。
2. 资源共享方式



  • 1.AQS支持两种资源共享方式:独占式(Exclusive)和共享式(Share)。
  • 2.独占式:只有一个线程能实行,如ReentrantLock。
  • 3.在独占模式下,假如线程获取到了资源,则其他线程必须期待,直到该线程开释资源。
  • 4.共享式:多个线程可同时实行,如Semaphore和CountDownLatch。
  • 5.在共享模式下,多个线程可以同时获取资源并实行任务,但资源的总量是有限的。
3. 焦点头脑与实现



  • 1.AQS的焦点头脑是,假如被哀求的共享资源空闲,则将当前哀求资源的线程设置为有效的工作线程,而且将共享资源设置为锁定状态。
  • 2.假如被哀求的共享资源被占用,那么就须要一套线程壅闭期待以及被唤醒时锁分配的机制。
  • 3.这个机制AQS是用CLH队列锁实现的,即将临时获取不到锁的线程参加到队列中。
  • 4.CLH(Craig, Landin, and Hagersten)队列是一个捏造的双向队列,即不存在队列实例,仅存在结点之间的关联关系。
  • 5.AQS将每条哀求共享资源的线程封装成一个CLH锁队列的结点(Node)来实现锁的分配。
4. 自界说同步器



  • 1.AQS只是一个框架,只界说了一个接口,具体资源的获取、开释都交由自界说同步器去实现。
  • 2.差别的自界说同步器争用共享资源的方式也差别。
  • 3.自界说同步器在实现时只需实现共享资源state的获取与开释方式即可,至于具体线程期待队列的维护(如获取资源失败入队、唤醒出队等),AQS已经在顶层实现好,不须要具体的同步器再做处理惩罚。
5. 常用实现类



  • 1.很多同步类的实现都依靠于AQS,比方常用的ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier等。
  • 2.这些类通过实现AQS中的模板方法(如tryAcquire、tryRelease、tryAcquireShared、tryReleaseShared等)来实现内部的同步逻辑。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表