java学习|图说多线程(三)各种并发工具类的关联

在上文中我们可以看到在jdk11中concurrentHashMap和copyOnWriteList都是用的synchronized,在JDK1.7中的concurrentHashMap中加锁的是ReentrantLock。两者对比之间, synchronized 是系统关键字,其加锁代码由指令monitorenter ,  monitorexit 所包围,如下图所示:

像ReentrantLock类似的高级锁则是类的形式。好处是提供了更为非富的锁功能。但类也有类的开销。

打开ReentrantLock的源码我们可以看到:其lock , unloack操作,都是委托给内部的Sync来实现的

通过代码我们可以看到sync 是 AbstractQueuedSynchronizer的一个子实现类。

我们可以简单的理解为, ReentrantLock是基于AbstractQueuedSynchronizer的扩展实现。

同样一些常用并发工具类:CountDownLatch,Semaphore,都是基于AQS来实现的,AQS可以理解为抽象队列同步器,我更喜欢理解为通用的基于队列的同步器。

CyclicBarrier 是基于ReentrantLock和Condition , 但Condition和ReentrantLock是基于AbstractQueuedSynchronizer做的实现。

这么一看,不得了了, 可以说我们常用的并发工具类都是基于AbstractQueuedSynchronizer来实现的。那AQS到底是个什么东西这么厉害。

从字面上来看,肯定是一个队列,有队列那就要有节点。基于队列的同步器,那肯定还要有些实现同步的方法,和一些表示同步的状态:

总结:从本文可以看出,AQS构成并发工具类的基础,要学习并发,则必须要学习AQS,今天先聊一下各个并发工具类的关联,下期我们来一起聊一聊AQS

—END—

前期回顾:

Java学习|图说String(一):String的存储方式

java学习|图说String(二):基于byte数组的String方法调用

java学习|图说String(三)String中'+'和StringBuilder的区别

QQ群:661749608

微信群请点击公众号菜单进微信群

们哦~

文字: 微笑的小小刀

排版:花音

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值