面试题:Jvm 的 synchronized 和 JDK 的 Lock

synchronized 和 Lock 的区别

  • 语法层面

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

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

    • 在没有竞争时 ,synchronized 做了很多优化,如偏向锁、轻量级锁,性能不赖
    • 在竞争激烈 时,Lock 的实现通常会提供更好的性能
相关推荐
黑马程序员毕设9 小时前
基于 Java 的餐饮点餐系统设计与应用报告
java·开发语言
SL_staff9 小时前
从文档工具到知识中枢:基于JVS数字底座构建企业级统一内容管理平台的技术实践
java·开源·全栈
SL_staff10 小时前
从‘连得上’到‘管得好’:JVS-IOT双引擎驱动设备运维闭环
java·物联网·产品
1-1=011 小时前
C# 委托与事件
开发语言·c#
Fuyo_111911 小时前
C++ 运行时多态与虚函数机制全面剖析【面试重点】
开发语言·c++·面试
w_zero_one12 小时前
递归算法(一)
java·开发语言·算法
SL_staff12 小时前
私有化低代码不是减配版开发:JVS双模式建模如何重建IT交付信任
java·低代码·spring cloud
墨着染霜华13 小时前
Redocly 生成 OpenAPI 接口文档踩坑实录|Node 版本兼容 + 接口地址错误问题解决
java
文丑颜不良啊13 小时前
LeetCode1881~1990题目解析
java·leetcode
Julien200413 小时前
管理机密(一)
运维·服务器·开发语言·学习方法