当前位置: 首页 > news >正文

java锁

乐观锁

乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作。java 中的乐观锁基本都是通过 CAS 操作实现的,CAS 是一种更新的原子操作,比较当前值跟传入值是否一样,一样则更新,否则失败。

悲观锁

悲观锁是就是悲观思想,即认为写多,遇到并发写的可能性高,每次去拿数据的时候都认为别人
会修改,所以每次在读写数据的时候都会上锁,这样别人想读写这个数据就会 block 直到拿到锁。
java 中的悲观锁就是 Synchronized,AQS 框架下的锁则是先尝试 cas 乐观锁去获取锁,获取不到,
才会转换为悲观锁,如 RetreenLock。

自旋锁

自旋锁原理非常简单,如果持有锁的线程能在很短时间内释放锁资源,那么那些等待竞争锁的线程就不需要做内核态和用户态之间的切换进入阻塞挂起状态,它们只需要等一等(自旋),等持有锁的线程释放锁后即可立即获取锁,这样就避免用户线程和内核的切换的消耗。

http://www.lryc.cn/news/335076.html

相关文章:

  • QA测试开发工程师面试题满分问答6: 如何判断接口功能正常?从QA的角度设计测试用例
  • vue 双向绑定
  • python--异常处理
  • element-ui result 组件源码分享
  • VRRP虚拟路由实验(思科)
  • SpringBoot通用模块--文件上传开发(阿里云OSS)
  • Fecify 商品标签功能
  • openstack中windows虚拟机时间显示异常问题处理
  • 很牛的一套仓库管理系统,免费复用【带源码】
  • Spark 部署与应用程序交互简单使用说明
  • 【二分查找】Leetcode 点名
  • JS中的运算符
  • Webots常用的执行器(Python版)
  • mySql数据库学习002-表数据查询操作
  • 【STL】stack与queue的底层原理及其实现
  • Ai大模型如何应用到机器视觉系统中
  • IntelliJ IDEA下载及安装教程(Windows操作系统)
  • 01 Python进阶:正则表达式
  • pdf图片识别分类
  • 24双非考研哈尔滨工程大学计算机(@程程笔记)
  • IO流(2.其他流)
  • PyTorch之计算模型推理时间
  • layui后台框架,将左侧功能栏目 集中到一个页面,通过上面的tab切换 在iframe加载对应页面
  • 【网络原理】使用Java基于TCP搭建简单客户端与服务器通信
  • Hadoop生态系统主要是什么?
  • GlusterFS分布式文件系统
  • spark本地模拟多个task时如何启动多个Excutor
  • RocketMQ笔记(八)SpringBoot整合RocketMQ广播消费消息
  • Appium如何自动判断浏览器驱动
  • MVCC-多版本并发控制