• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

three-oom

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

线程的锁

乐观锁 : 调用时 , 假设资源没有被线程调用 , 调用前 , 调用方法将内存中资源的值和预期的原值进行比较 , 如果一致则更新 , 否则不做任何操作

悲观锁 : 调用时 , 假设资源总是被线程调用 , 每次使用时都加锁 , 例如sychronized

场景 :

  • 乐观锁适用于重试代价不大 / 数据争用不严重 / 需要快速响应的场景

  • 悲观锁使用于重试代价大 , 数据争用严重的场景

公平锁 : 多个线程去获取锁的时候 , 线程会直接进入队列 , 只能是队列第一位才能得到锁

非公平锁 : 多个线程去获取锁的时候 , 会尝试直接获取 , 获取不到 , 猜进入等待队列 , 如果能获取到 , 则直接获取到 , 非公平锁性能比公平锁块 5~10 倍

可重入锁 : 线程已经获取某个锁 , 可以再次获取 , 而不会出现死锁

属性锁 :

  • 共享锁 : 当事务对数据加上读锁的时候 , 其他事务只能对数据加读锁 ,不能做任何的修改

主要是为了支持在并发的场景下的读取数据而出现的 , 读取数据时 , 不允许其他事务对当前的数据进行修改操作 , 从而避免 "不可重读" 的问题的出现

  • 排他锁 : 当事务对数据加上写锁的时候 , 其他事务既不能对该数据添加读锁 , 也不能对该数据添加写锁 , 写锁和其他锁是互斥的 , 只有在当前数据的写锁被释放后 , 其他事务才能对其添加写锁或读锁

主要是为了解决在修改数据时 , 不允许其他事务对当前数据进行修改和读取操作 , 从而可以有效避免 "脏读" 的问题产生

posted on 2023-11-15 19:31  蜂歌的小弟  阅读(16)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3