共计 789 个字符,预计需要花费 2 分钟才能阅读完成。
Hi,大家好,我是 Mic。
往年的市场环境是真的很难。很多工作一年的人,面试的难度相当于一个 4 年教训的人。
越是这样,咱们越应该弱小本人,能力在顺境中取得更多的机会。
明天一个一年教训的粉丝,被问到“AQS 的实现原理”,来找我求助。
上面看看高手对于这个问题的答复。
喜爱我作品的小伙伴,记得点赞珍藏加关注。
高手:
AQS 它是 J.U.C 这个包外面十分外围的一个抽象类,它为多线程访问共享资源提供了一个队列同步器。
在 J.U.C 这个包外面,很多组件都依赖 AQS 实现线程的同步和唤醒,比方 Lock、Semaphore、CountDownLatch 等等。
AQS 外部由两个外围局部组成:
- 一个 volatile 润饰的 state 变量,作为一个竞态条件
- 用双向链表构造保护的 FIFO 线程期待队列
它的具体工作原理是,多个线程通过对这个 state 共享变量进行批改来实现竞态条件,
竞争失败的线程退出到 FIFO 队列并且阻塞,
抢占到竞态资源的线程开释之后,后续的线程依照 FIFO 程序实现有序唤醒。
AQS 外面提供了两种资源共享形式,
一种是独占资源,同一个时刻只能有一个线程取得竞态资源。比方 ReentrantLock 就是应用这种形式实现排他锁
另一种是共享资源,同一个时刻,多个线程能够同时取得竞态资源。CountDownLatch 或者 Semaphore 就是应用共享资源的形式,实现同时唤醒多个线程。
总结
在理论开发中,如果咱们须要实现一些非凡的互斥场景,
间接应用 ReentrantLock 又有点麻烦,那就能够本人去集成 AQS,自定义多线程竞争的实现逻辑。
这个问题次要考查求职责对 Java 根底的了解。
版权申明:本博客所有文章除特地申明外,均采纳 CC BY-NC-SA 4.0 许可协定。转载请注明来自
Mic 带你学架构
!
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!