Java 同步锁ReentrantLock与抽象同步队列AQS
作者:互联网
AbstractQueuedSynchronizer 抽象同步队列,它是个模板类提供了许多以锁相关的操作,常说的AQS指的就是它。AQS继承了AbstractOwnableSynchronizer
类,AOS用于保存线程对象,保存什么线程对象呢?保存锁被独占的线程对象。
抽象同步队列AQS除了实现序列化标记接口,并没有实现任何的同步接口,该类提供了许多同步状态获取和释放的方法给自定义同步器使用,如ReentrantLock的内部类Sync。抽象同步队列支持独占式或共享式的的获取同步状态,方便实现不同类型的自定义同步器。一般方法名带有Shared
的为共享式,比如,尝试以共享式的获取锁的方法int tryAcquireShared(int)
,而独占式获取锁方法为boolean tryAcquire(int)
。
AQS是抽象同步队列,其重点就是同步队列
及如何操作同步队列
。
同步队列
双向同步队列,采用尾插法新增节点,从头部的下一个节点获取操作节点,节点自旋获取同步锁,实现FIFO(先进先出)
理解节点中的属性值作用