个人随笔
目录
并发(九)、AQS和synchronized殊途同归的实现原理
2021-04-26 20:59:38

在并发编程中,我们通常会通过synchronized或者ReetrantLock(继承AQS)来进行同步代码块,那作为程序员最好奇的就是它们的底层实现原理是啥呢?

ReetrantLock实现原理

通过代码我们可以知道,ReetrantLock通过的是自旋CAS然后调用Unsafe.park来阻塞线程。

synchronized实现原理

通过源码我们发现Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的,然后通过自旋CAS来尝试把monitor的owner字段设置为当前线程,失败后会调用操作系统的互斥原语mutex来实现阻塞唤醒。

而我们知道Unsafe.park/unpark底层也是调用操作系统的互斥原语mutex来实现阻塞唤醒。这绕来绕去绕到同一个地方了。

注:若调用了互斥原语mutex那么将会触发用户态和内核态的切换,这非常影响性能,所以说synchronized是重量级锁,经过优化的synchronized前面的轻量级锁都只是自旋CAS不阻塞。


具体啥是CAS,啥是监视器,请参考下面的相关资料:

JVM 源码分析(四):深入理解 park / unpark:https://www.daqianduan.com/21245.html
synchronized底层实现原理及锁优化:https://www.cnblogs.com/lixiaochong/p/14425591.html
mutex 互斥:https://blog.csdn.net/qq_39277419/article/details/99295585
理解Monitor监视器锁原理:https://blog.csdn.net/qq_43783527/article/details/114669174

 14

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号