面试题:Jvm 的 synchronized 和 JDK 的 Lock

synchronized 和 Lock 的区别

  • 语法层面

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

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

    • 没有竞争时 ,synchronized 做了很多优化,如偏向锁、轻量级锁,性能不赖
    • 竞争激烈 时,Lock 的实现通常会提供更好的性能
相关推荐
Data_agent2 分钟前
1688获得1688公司档案信息API,python请求示例
开发语言·数据库·python
q***01774 分钟前
Spring.factories
java·数据库·spring
-大头.7 分钟前
Spring Bean作用域深度解析与实战
java·后端·spring
qq_3363139310 分钟前
java基础-排序算法
java·开发语言·排序算法
豆沙沙包?13 分钟前
2025年--Lc298-1019. 链表中的下一个更大节点(栈)--java版
java·数据结构·链表
fengfuyao98514 分钟前
匈牙利算法的MATLAB实现
java·算法·matlab
毕设源码-钟学长15 分钟前
【开题答辩全过程】以 基于springboot农科所农作物信息管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
周杰伦fans20 分钟前
C#中OrderByDescending 是LINQ扩展方法之一
开发语言·c#·linq
李绍熹39 分钟前
Lua 语言基础教程
开发语言·junit·lua
周杰伦fans43 分钟前
C# 中 SQL Server 数据库调优指南(小白友好版)
开发语言·数据库·c#