最近流行的AQS小伙伴们知道是什么吗?很多同步类的实现都要依赖它,本篇文章小编就来给大家介绍下它的概念及原理。
AQS是什么?
全称AbstractQueuedSynchronizer,它给我们提供了一个FIFO队列,可以把它看成是一个用来实现同步锁以及其他涉及到同步功能的核心组件,一般的有:ReentrantLock、CountDownLatch等。
AQS是一个抽象类,主要是通过继承方式来使用的,它本身没有任何能够实现的同步接口,仅仅是定义了同步状态的获取以及释放的方法来提供自定义的同步组件。
这么说吧,只要你搞懂了AQS,那么J.U.C中的绝大部分api差不多都能轻松掌握。
AQS原理有?
Sync queue:同步队列,这是一个双向链表。包括了head节点和tail节点。head节点主要用作后续的调度。 Condition queue:非必须,单向链表。当程序中存在cindition的时候才会存在此列表。
核心思想
如若一个被请求的共享资源空闲,则将当前在请求资源的线程设置为有效的工作线程,并且把共享资源设置为锁定状态。但如果被请求的共享资源被占用,就需要另一套线程阻塞等待及被唤醒时锁分配的机制,AQS是用CLH队列锁实现这个机制的,即将暂时获取不到锁的线程加入到队列中。
AQS中会使用一个int成员变量来表示同步状态,再通过内置的FIFO队列来完成获取资源线程的排队工作。AQS使用CAS对该同步状态进行原子操作实现对其值的修改。
以上就是本篇文章的所有内容,小伙伴们理解了吗?java从入门到精通是一条激流勇进的道路,是没有后退可言的,想要了解更多java知识就快来关注奇Q工具网吧。
推荐阅读: