面试题:Jvm 的 synchronized 和 JDK 的 Lock

synchronized 和 Lock 的区别

  • 语法层面

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

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

    • 在没有竞争时 ,synchronized 做了很多优化,如偏向锁、轻量级锁,性能不赖
    • 在竞争激烈 时,Lock 的实现通常会提供更好的性能
相关推荐
kimnoic1 分钟前
Python数据分析中正则表达式匹配字符串与常用函数示例详解
开发语言·python
Pniubi2 分钟前
区分Java创建线程池、多线程
java·线程·线程池·多线程·并发
程序员梅雨8 分钟前
ZooKeeper面经总结
java·大数据·linux·分布式·后端·zookeeper·中间件
中屹指纹浏览器svip11 分钟前
打开账号环境网页报错,常见原因有哪些?
服务器·开发语言·php·中屹指纹浏览器
朝朝辞暮i20 分钟前
第 01 讲:Python 变量、对象、数据类型与内存引用
开发语言·python
Yyyyyy~28 分钟前
【Java】多线程初阶
java
蜗牛互联网28 分钟前
Java 17 调用视觉 Responses API:JSON 约束与人工复核路由
java·人工智能·后端
外收内放42 分钟前
Python基础语法练习题(69)
开发语言·python
lojox1 小时前
深入理解 C++ STL:vector 底层实现、迭代器失效与 list 特性
开发语言·c++
iotxiaohu1 小时前
用 cflow 查看 C 函数调用关系
c语言·开发语言·cflow