面试题:Jvm 的 synchronized 和 JDK 的 Lock

synchronized 和 Lock 的区别

  • 语法层面

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

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

    • 没有竞争时,synchronized 做了很多优化,如偏向锁、轻量级锁,性能不赖
    • 竞争激烈时,Lock 的实现通常会提供更好的性能

相关推荐

  1. 面试Jvm synchronized JDK Lock

    2024-04-09 10:46:06       31 阅读
  2. synchronized Lock 区别是什么

    2024-04-09 10:46:06       45 阅读
  3. JDK、JREJVM区别

    2024-04-09 10:46:06       38 阅读
  4. JVM 面试——CMSG1区别

    2024-04-09 10:46:06       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-09 10:46:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-09 10:46:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-09 10:46:06       82 阅读
  4. Python语言-面向对象

    2024-04-09 10:46:06       91 阅读

热门阅读

  1. WPF —— 平移变换动画实例

    2024-04-09 10:46:06       39 阅读
  2. 【WPF应用40】WPF 基本控件 - Border:详解与实例

    2024-04-09 10:46:06       40 阅读
  3. 代码示例:OpenSSL AES CBC 加密

    2024-04-09 10:46:06       31 阅读
  4. 【WPF应用41】WPF中的Expander控件详解

    2024-04-09 10:46:06       36 阅读
  5. matlab流体仿真

    2024-04-09 10:46:06       36 阅读
  6. webpack打包携带某个文件到dist目录

    2024-04-09 10:46:06       43 阅读
  7. Docker搭建CodiMD

    2024-04-09 10:46:06       36 阅读
  8. Golang 为什么要使用接口

    2024-04-09 10:46:06       41 阅读
  9. Mysql的四种索引实现方式

    2024-04-09 10:46:06       36 阅读
  10. 【C++】STL--list

    2024-04-09 10:46:06       39 阅读