【理解向】对于synchronized,CAS,AQS的基础认识模型

本文旨在帮助对JAVA锁知识不熟悉的读者建立认知模型,介绍了synchronized的原理及其优缺点,如基于操作系统的实现导致的效率问题。接着探讨了CAS与Unsafe,说明了其依赖于CPU的cmpxchg指令来保证原子性和可见性。最后,文章提到了JAVA中的锁工具,如synchronized的互斥和可重入特性,AQS如何实现线程阻塞,并提供独占和共享锁,以及Reentrantlock的公平锁和非公平锁实现。
摘要由CSDN通过智能技术生成


前言

本文写作目标 是对于锁知识不太熟悉,概念太多从而无法梳理的读者,提供一种对于JAVA中锁知识搭建的认识模型,同时作为笔者笔记记录.如有错误还请指正.


一、提供给JAVA使用的锁的实现

1.synchronized

(1)实现原理

JAVA中的多线程,实际上是对操作系统的多线程的一种映射,也就是说,JAVA中的每一条线程都是操作系统中的每一条线程
synchronized底层由C++语言的Monitor(监视者)实现,而C++语言的Monitor是针对于操作系统的操作,所以synchronized的底层是属于操作系统级别的操作 也就是操作系统命令实现

(2)优缺点

优:基于操作系统,安全,同步
缺:基于操作系统,线程间的切换需要操作系统内核态与用户态之间切换,效率低

2.CAS Unsafe

(1)实现原理

为了针对synchronized的不足进行改进,同时尽量满足线程安全的需求,产出的新型解决方案
CAS的思想简单来说 当线程修改一个目标值时候,会对比目标值是否符合该线程对于该值修改前的预期,如果满足就修改,如果不满足,则放弃(Unsafe默认修改不成功会默认自旋10次)

聪明的小伙伴应该一下就发现CAS思想中的两个问题:
1,线程获取并对比目标值的时候,能够确认该目标值此时是正确的吗?(可见性问题)
2,线程在比较并修改目标值的时候,能够确认不会有其他线程正在执行该步骤嘛?(原子性问题)
满足原子性:每一个操作都是最小不可分割单位,不会被

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值