![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC
Fredok_915
微信公众号【技术架构公社】
展开
-
JUC并发编程 - ReentrantReadWriteLock源码分析
前言ReentrantReadWriteLock锁是AQS的另一种实现,它做到了可重入、可中断,分为公平和非公平两类实现,并且实现了读锁和写锁两类同时控制。在使用时,读写锁持有的同一个Lock实例,通过控制锁的行为,及CLH节点状态,来操作读锁和写锁,对于写少读多的场景,能提高效率。由于我对AQS及ReentrantLock的源码已经做过分析,因此本篇文章对经常出现的代码流程介绍的会较为粗略,初次接触ReentrantReadWriteLock源码的同学,建议先从前面的文章看起,这样反而更能清晰的理原创 2020-08-22 12:41:15 · 303 阅读 · 0 评论 -
JUC并发编程 - ReentrantLock源码分析
前言前面分析了AQS类的源码,但真正实现AQS的实现类都在JUC中,当然AQS也是JUC的一部分,只是它不面向应用,除非自己去继承实现一套逻辑。在java的java.util.concurrent包,简称JUC,其内包含的类都与多线程有关,是非常重要的一个包。接下来准备针对JUC下常用类进行分析,剖析它们的原理及使用特点。而本文将针对比较常用的ReentrantLock源码来分析。Re...原创 2020-04-15 10:58:40 · 275 阅读 · 0 评论 -
面试必考AQS-await和signal的实现原理
Condition接口这个接口为我们提供了2类方法,await()和signal(),其实现类ConditionObject,是AQS中的一个子类。在介绍AQS结构的文章中,ConditionObject类被跳过了,这个类的存在与CLH模型关联度不是很强,但在并发编程中却是不可或缺的一环,它提供的await()和signal()方法,能够为多线程之间交互提供帮助,能让线程暂停和恢复,是很重要的...原创 2020-04-08 16:46:16 · 2108 阅读 · 1 评论 -
面试必考AQS-共享锁的申请与释放,传播状态
引子前文《面试必考AQS-AQS源码全局分析》已经对AQS中对于共享 锁的申请与释放流程进行了总结。而对于申请与释放,在AQS中提现的是与锁并无关系,而是针对同步队列的操作,向同步队列中添加、移除Node实例对象,操作Node中的线程对象。而我们日常使用的锁类,只是表象,何时可以加锁、解锁,达到何种条件才算加锁成功、解锁成功,这才是AQS锁实现的功能。接下来将从源码层面看一下,共享锁的申请与释...原创 2020-04-03 11:37:33 · 490 阅读 · 0 评论 -
面试必考AQS-排它锁的申请与释放
引子前文《面试必考AQS-排它锁的申请与释放》已经对AQS中对于排它锁的申请与释放流程进行了总结。而对于申请与释放,在AQS中提现的是与锁并无关系,而是针对同步队列的操作,向同步队列中添加、移除Node实例对象,操作Node中的线程对象。而我们日常使用的锁类,只是表象,何时可以加锁、解锁,达到何种条件才算加锁成功、解锁成功,这才是AQS锁实现的功能。接下来将从源码层面看一下,排它锁的申请与释放...原创 2020-03-26 11:11:31 · 294 阅读 · 0 评论 -
面试必考AQS-AQS源码全局分析
源码划分在《面试必考AQS-AQS概览》中我将AQS的源码,大致分为六部分,总结一下分别是:链表节点类、链表头尾指针 条件对象 同步器状态/资源 用于cas操作的变量及方法 一些实例方法操作链表及同步器状态状态 一些抽象方法等待被实现接下来就逐个介绍这些内容。抽象方法介绍AQS中包含5个未实现方法,也就是等待子类来实现个性化逻辑的,他们是:protected bo...原创 2020-03-25 09:59:16 · 205 阅读 · 0 评论 -
面试必考AQS-AQS概览
AQS的含义AQS是java.util.concurrent.locks.AbstractQueuedSynchronizer的简称,直译就是“抽象队列同步器”,它是java中大部分lock类的间接实现者。AQS中实现的各种逻辑非常精妙,在此膜拜一下Doug Lea老爷子。刚刚有提到AQS间接实现了lock类,检查java中提供的lock类,如ReentrantLock,Reentrant...原创 2020-03-24 16:32:10 · 219 阅读 · 0 评论