面试题:Jvm 的 synchronized 和 JDK 的 Lock

synchronized 和 Lock 的区别

  • 语法层面

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

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

    • 没有竞争时 ,synchronized 做了很多优化,如偏向锁、轻量级锁,性能不赖
    • 竞争激烈 时,Lock 的实现通常会提供更好的性能
相关推荐
宋哥转AI1 分钟前
Java后端转AI Agent:技术栈全景图与从ReAct到多Agent协作实战
java·人工智能·agent
J-Tony112 分钟前
【JVM】双亲委派
jvm
Mr.Entropy4 分钟前
ecplise 导出maven依赖jar
java·maven·jar
Drone_xjw6 分钟前
Qt国际化多语言配置详解-入门到精通
开发语言·qt·命令模式
爱吃提升8 分钟前
Python 多线程 threading + 多进程 multiprocessing 完整实操教程
开发语言·python
ourenjiang9 分钟前
【测试框架Junit】强制终止JVM进程
jvm·junit
ANnianStriver11 分钟前
PetLumina 05 — App 端 UI 效果应用
java·ui·ai编程
不懂的浪漫13 分钟前
10|Netty native epoll 与零拷贝:从 Java NIO 再往下看一层![
java·netty·nio
许彰午13 分钟前
24_Java NIO核心组件
java·python·nio
不会C语言的男孩14 分钟前
C++ Primer 第18章:用于大型程序的工具
开发语言·c++