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

对比悲观锁与乐观锁

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

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

    • 其核心思想是【无需加锁,每次只有一个线程能成功修改共享变量,其它失败的线程不需要停止,不断重试直至成功】
    • 由于线程一直运行,不需要阻塞,因此不涉及线程上下文切换
    • 它需要多核 cpu 支持,且线程数不应超过 cpu 核数
相关推荐
Grey Zeng9 小时前
Java SE 25新增特性
java·jdk·jdk新特性·jdk25
雨白10 小时前
Java 线程通信基础:interrupt、wait 和 notifyAll 详解
android·java
架构师沉默14 小时前
设计多租户 SaaS 系统,如何做到数据隔离 & 资源配额?
java·后端·架构
Java中文社群15 小时前
重要:Java25正式发布(长期支持版)!
java·后端·面试
每天进步一点_JL17 小时前
JVM 类加载:双亲委派机制
java·后端
用户2986985301417 小时前
Java HTML 转 Word 完整指南
java·后端
渣哥17 小时前
原来公平锁和非公平锁差别这么大
java
渣哥17 小时前
99% 的人没搞懂:Semaphore 到底是干啥的?
java
J2K18 小时前
JDK都25了,你还没用过ZGC?那真得补补课了
java·jvm·后端
kfyty72518 小时前
不依赖第三方,不销毁重建,loveqq 框架如何原生实现动态线程池?
java·架构