面试题:Jvm 的 synchronized 和 JDK 的 Lock

synchronized 和 Lock 的区别

  • 语法层面

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

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

    • 没有竞争时 ,synchronized 做了很多优化,如偏向锁、轻量级锁,性能不赖
    • 竞争激烈 时,Lock 的实现通常会提供更好的性能
相关推荐
负载均衡-sch几秒前
Java算法-力扣leetcode-383. 赎金信
java·算法·leetcode
叶浩成5203 分钟前
手写chatGPT——fetch解析text/event-stream会话流并逐字回显到页面——js技能提升
开发语言·javascript·ecmascript
PhyliciaFelicia4 分钟前
基于R语言生物信息学大数据分析与绘图
开发语言·人工智能·深度学习·机器学习·数据分析·r语言
like45513 分钟前
设计模式-策略模式
java·开发语言·设计模式·策略模式
worker..14 分钟前
BUUCTF [安洵杯 2019]easy_serialize_php 1
开发语言·php
冯一川18 分钟前
Qt 5.14安装(配置MSVC 2017)
开发语言·qt
韭菜钟22 分钟前
在Qt中获取Windows中进程的PID
开发语言·windows·qt
任小永的博客27 分钟前
DjangoRF-14-创建request子应用
开发语言·后端·python·django
friklogff39 分钟前
【Rust光年纪】提升数据安全性与完整性:Rust语言哈希算法库深度对比
开发语言·rust·哈希算法
摆烂牛杂41 分钟前
数据结构与算法--栈
java·开发语言·数据结构·c++·算法