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

对比悲观锁与乐观锁

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

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

    • 其核心思想是【无需加锁,每次只有一个线程能成功修改共享变量,其它失败的线程不需要停止,不断重试直至成功】
    • 由于线程一直运行,不需要阻塞,因此不涉及线程上下文切换
    • 它需要多核 cpu 支持,且线程数不应超过 cpu 核数
相关推荐
A-Kamen2 分钟前
Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实战指南
java·spring boot·后端
练川4 分钟前
Stream特性(踩坑):惰性执行、不修改原始数据源
java·stream
狂奔小菜鸡9 分钟前
Java运行时数据区
java·jvm·后端
trymoLiu15 分钟前
SpringBoot 实现 RSA+AES 自动接口解密!
java·spring boot
却道天凉_好个秋28 分钟前
c++ 嵌入汇编的方式实现int型自增
开发语言·汇编·c++
ChinaRainbowSea1 小时前
MySQL 索引的数据结构(详细说明)
java·数据结构·数据库·后端·mysql
33三 三like1 小时前
软件工程画图题
java·开发语言·软件工程
去看全世界的云1 小时前
【Kotlin】Kotlin基础笔记
android·java·笔记·kotlin
tangweiguo030519871 小时前
Android打造易用的 WiFi 工具类:WifiUtils 封装实践
android·java·wifi
南山不太冷1 小时前
初识Spring(1)——mvc概念,部分常用注解
java·spring·mvc