AQS中lock源码解析
什么是AQS?
就是基于双向链表+CAS实现的锁的一种机制或者方法思想。 就是AbstractQueuedSynchronizer,是Java并发包下的一个基类 基于AQS实现的同步器包括:ReentrantLock、CountDownLatch、Samaphone、FutureTask、ReentrantWriteLock
AbstractQueuedSynchronizer源码解析(基于ReentrantLock的非公平锁)
AQS类中核心的属性:定义内部类--双向链表Node对象,一个头节点head,一个尾节点tail,一个用来标识锁的次数的状态state。如下图: AQS中lock动作的核心方法
从AQS队列中获取锁资源 将当前节点添加到AQS双向链表尾部 初始化AQS队列,向其初始化一个空的head节点,并将当前节点放入AQS队列尾部 找到当前节点之前有效的第一个节点,将中间无效节点干掉 基于Unsafe类的park方法挂起当前线程 取消请求锁资源 唤醒下一个节点 基于CAS对AQS中的属性进行更新 ReentrantLock的核心属性和方法
lock方法 内部类--Sync(定义锁和获取锁资源方法)
抽象的lock方法 非公平锁获取锁资源方法--nofairTryAcquire 内部类--FairSync(继承Sync)
lock tryAcquire 内部类--NonFairSync(继承Sync)
lock tryAcquire
lock总体流程调用思路图
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1112399.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!