
AQS
not back
这个作者很懒,什么都没留下…
展开
-
AQS condition的源码实现
介绍 说到AQS中的condition,大家基本都用过,主要就是await和signal的方法的使用。使用方式和wait于notify类似,也都是需要获得锁。但是signal不一样的一点是可以指定线程唤醒,虽然执行了也不一定立刻唤醒,但是可以指定想要的线程唤醒。这点就比notify要灵活许多。先举个简单的应用的例子,大家都能看懂。然后说下在AQS中,await和signal的源码是如何实现的。 public class TestAwait1 { private final Reentrant原创 2020-12-09 16:31:14 · 201 阅读 · 0 评论 -
AQS共享锁源码分析
上一篇博客介绍了AQS中的排他锁,现在说一下AQS中的共享锁。 源码解析 获取锁 public final void acquireShared(int arg) { // 剩余锁的资源是否大于0 if (tryAcquireShared(arg) < 0) doAcquireShared(arg); } private void doAcquireShared(int arg) { // 设置锁.原创 2020-12-08 23:15:17 · 346 阅读 · 1 评论 -
AQS排他锁源码分析
介绍 说到java中的锁就会想到synchronized和lock,而说到lock一般就会想到ReentrantLock,而ReentrantLock的底层实现就是依赖于AbstractQueuedSynchronizer,也就是AQS。 AQS已经实现了底层的逻辑,对于想要自己实现锁,只需要继承AQS然后维护其state状态就可以了。 源码解析 状态解析 waitStatus状态解析: CANCELLED(1):表示当前结点已取消调度。当timeout或被中断(响应中断的情况下),会触发.原创 2020-12-02 16:17:37 · 275 阅读 · 0 评论