面试题:Jvm 的 synchronized 和 JDK 的 Lock

synchronized 和 Lock 的区别

  • 语法层面

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

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

    • 没有竞争时 ,synchronized 做了很多优化,如偏向锁、轻量级锁,性能不赖
    • 竞争激烈 时,Lock 的实现通常会提供更好的性能
相关推荐
好好研究1 分钟前
SpringMVC框架 - 文件上传
java·spring·mvc·idea
栗子~~11 分钟前
java-根据word模板灵活生成word文档-demo
java·开发语言·word
秃了也弱了。15 分钟前
testng:Java界功能强大的单元测试框架
java·单元测试·log4j
曾经的三心草20 分钟前
JavaEE初阶-多线程2
android·java·java-ee
Boop_wu1 小时前
[Java EE] 多线程 -- 初阶(5) [线程池和定时器]
java·开发语言
S***H2832 小时前
JavaScript原型链继承
开发语言·javascript·原型模式
kk”2 小时前
C++ map
开发语言·c++
车端域控测试工程师2 小时前
Autosar网络管理测试用例 - TC003
c语言·开发语言·学习·汽车·测试用例·capl·canoe
共享家95272 小时前
特殊类的设计
开发语言·c++
雨中飘荡的记忆2 小时前
Java + Groovy计费引擎详解
java·groovy