暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Java底层实现逻辑AQS源代码流程图

小兀军 2021-10-30
1498

Java源码



AQS全称是AbstractOwnableSynchronizer,是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石, 通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类变量表示持有锁的状态


下面主要演示一下根据源代码梳理的操作流程图,核心东西都在图里了就不再过多文字描述。

获取锁过程


下一步开始acquireQueued操作,这个方法中用了一个CAS去无线循环获取锁,其中用了LockSupport.park()进行等待唤醒。

其中有两个操作的方法细节如下

  • tryAcquire :执行不公平的 tryLock。tryAcquire 在子类中实现,但两者都需要对 trylock 方法进行非公平尝试

  • shouldParkAfterFailedAcquire() 检查和更新未能获取的节点的状态。如果线程应该阻塞,则返回 true。这是所有获取循环中的主要信号

解锁过程



上面就是解锁的过程了,下面是tryRelease的实现
尝试解锁并判断解锁状态 tryRelease

  • Java源注解是这么说的

  • A synchronizer that may be exclusively owned by a thread. This class provides a basis for creating locks and related synchronizers that may entail a notion of ownership. The AbstractOwnableSynchronizer class itself does not manage or use this information. However, subclasses and tools may use appropriately maintained values to help control and monitor access and provide diagnostics.

  • 自从:

  • 1.6

  • 作者:Doug Lea


文章转载自小兀军,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论