前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >4.从AbstractQueuedSynchronizer(AQS)说起(3)——AQS结语

4.从AbstractQueuedSynchronizer(AQS)说起(3)——AQS结语

作者头像
用户1148394
发布2018-01-12 17:39:45
5840
发布2018-01-12 17:39:45
举报
文章被收录于专栏:余林丰余林丰

  前两节的内容《2.从AbstractQueuedSynchronizer(AQS)说起(1)——独占模式的锁获取与释放》 《3.从AbstractQueuedSynchronizer(AQS)说起(2)——共享模式的锁获取与释放》对AQS同步器已经有了一个大致的了解,从独占模式和共享模式来解析了AQS的两个基本方面,一个是同步状态的获取,另外一个是同步状态的释放,这是AQS最基本的特性,前面两节都是以阻塞的形式获取同步状态,但实际上AQS还能超时等待获取同步状态,或者非阻塞的方式获取同步状态。

  以下是AQS锁定义的所有情况下同步状态的获取与释放(粗体为前两节已经讨论过),有了前两篇的解析,实际上剩余的方法几乎已经是换汤不换药。在这里就不再代码的具体分析,而我希望是在真正解读其子类的时候再返回来解析。

image.png
image.png

  以下是AQS中给提供的获取同步状态等相关的方法:

image.png
image.png

 以上方法或多或少再其子类有用到,具体的实现都不复杂,我们在这里也不对其一一做出分析,而是在具体分析到AQS的子类时,我们再回过头来看方法的实现。

最后我们再来看看子类可以重写的方法,这些方法在前两节中有提到过:

image.png
image.png

Java并发包的第一个源码解读并不顺利,起初是想以Lock开头,但发现AQS不甚了解,继而决定从AQS入手。而真正从AQS入手过后发现很多原理及方法并不熟悉,又想从其子类之一ReentrantLock$Sync由下往上,但发现还是动不了脑子和笔,无奈陷入了停滞。最终决定由上往下进行解读,有的地方需要子类或者其他类做解释的时候要么跳过,要么一句话带过。在查找AQS的相关资料时,我发现其实源代码就是一个很好的“老师”,作者实际上已经将其实现的原理和过程以及设计都已经描述在其中,但又出现一个问题,注释都是英文,很多地方看不懂。网上有关AQS的解读都没有成套成体系的资料,于是开始将注意力转向书籍,先是查阅《Java并发编程实战》也许对于外国人来说源码中注释里已经写得很清楚的东西就不用再阐述了,而我正是需要最最基础的“注释翻译”。再查阅《Thinking in Java》更是没有我想要的东西,再看看其他的书均没有。突然想起有一个国人写的书《Java并发编程的艺术》,看了看目录决定入手,这本书的确对我入门Java并发包的源码有很大的帮助,尽管它不想《Java并发编程实战》这么经典、耐看,但是它作为入门级却有很大的帮助,文中的不少分析就是结合这本书以及源码才让我得以比较顺利的开展第一个Java并发包的AbstractQueuedSynchronizer源码解读。源码的阅读也许就是这样,跳过来跳过去,这个类继承,那个类实现,相互交叉耦合,很难一下就能读懂作者所要想表达的意思,坚持读下去,一定会豁然开朗。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-05-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档