面试题:Jvm 的 synchronized 和 JDK 的 Lock

synchronized 和 Lock 的区别

  • 语法层面

    • synchronized 是关键字,源码在 jvm 中,用 c++ 语言实现
    • Lock 是接口,源码由 jdk 提供,用 java 语言实现
    • 使用 synchronized 时,退出同步代码块锁会自动释放 ,而使用 Lock 时,需要手动调用 unlock 方法释放锁
  • 功能

    • 二者均属于悲观锁、都具备基本的互斥、同步、锁重入功能
    • Lock 提供了许多 synchronized 不具备的功能,例如获取等待状态、公平锁、可打断、可超时、多条件变量
    • Lock 有适合不同场景的实现,如 ReentrantLock, ReentrantReadWriteLock
  • 性能层面

    • 在没有竞争时 ,synchronized 做了很多优化,如偏向锁、轻量级锁,性能不赖
    • 在竞争激烈 时,Lock 的实现通常会提供更好的性能
相关推荐
XiYang-DING6 分钟前
P4009.和为K的子数组个数 & P5522.异或和为 k 的子数组个数
java·开发语言
TinyKey10 分钟前
malloc_debug_notes
java
郭小李11 分钟前
spring @PathVariable 注解用法
java·后端·spring
用户31268748772011 分钟前
Java 锁全景:synchronized、ReentrantLock、ReadWriteLock、StampedLock
java
鱼宵18 分钟前
CSV 怎么做销售报表?Stream 第 9 课:读洗聚排打五段管道一次跑通
java·报表·stream
jaysee-sjc24 分钟前
【苍穹外卖】Day12:工作台数据看板与 Excel 报表导出
java·开发语言·数据库·spring boot·spring·微信·excel
w_zero_one25 分钟前
算法--桶思想
java·开发语言·算法
MetaLite27 分钟前
Spring 同一个类里调用 @CacheEvict,为什么缓存没清掉?
java·spring·缓存
一个游离的指针36 分钟前
ES6新特性:let、const、块级作用域
开发语言·javascript·es6
sunburn-42 分钟前
数据库聚合查询完整教程:从基础函数到实战统计
java·数据库·mysql·数据库开发