[java][基础] 悲观锁 vs 乐观锁

对比悲观锁与乐观锁

  • 悲观锁的代表是 synchronized 和 Lock 锁

    • 其核心思想是【线程只有占有了锁,才能去操作共享变量,每次只有一个线程占锁成功,获取锁失败的线程,都得停下来等待】
    • 线程从运行到阻塞、再从阻塞到唤醒,涉及线程上下文切换,如果频繁发生,影响性能
    • 实际上,线程在获取 synchronized 和 Lock 锁时,如果锁已被占用,都会做几次重试操作,减少阻塞的机会
  • 乐观锁的代表是 AtomicInteger,使用 cas 来保证原子性

    • 其核心思想是【无需加锁,每次只有一个线程能成功修改共享变量,其它失败的线程不需要停止,不断重试直至成功】
    • 由于线程一直运行,不需要阻塞,因此不涉及线程上下文切换
    • 它需要多核 cpu 支持,且线程数不应超过 cpu 核数
相关推荐
尘浮7286 分钟前
60天python训练计划----day45
开发语言·python
Magnum Lehar10 分钟前
vulkan游戏引擎test_manager实现
java·算法·游戏引擎
sss191s12 分钟前
校招 java 面试基础题目及解析
java·开发语言·面试
异常君15 分钟前
MySQL 中 count(*)、count(1)、count(字段)性能对比:一次彻底搞清楚
java·mysql·面试
sduwcgg38 分钟前
python的numpy的MKL加速
开发语言·python·numpy
wkj00141 分钟前
QuaggaJS 配置参数详解
java·linux·服务器·javascript·quaggajs
钢铁男儿1 小时前
Python 接口:从协议到抽象基 类(定义并使用一个抽象基类)
开发语言·python
暴力求解1 小时前
C++类和对象(上)
开发语言·c++·算法
让我们一起加油好吗1 小时前
【基础算法】枚举(普通枚举、二进制枚举)
开发语言·c++·算法·二进制·枚举·位运算
大锦终1 小时前
【C++】特殊类设计
开发语言·c++