面试:lock 和 synchronized

一、语法层面

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

二、功能层面

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

三、性能层面

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

lock锁像队列一样逐个获得锁

ReentrantLock有两种实现方式,一种是有参的构造,会根据你所设置的参数来决定是公平还是非公平锁。

另一种是无参构造,默认是非公平锁。

相关推荐

  1. 面试题:Jvm 的 synchronized JDK 的 Lock

    2024-04-20 15:38:02       15 阅读
  2. synchronized Lock 的区别是什么

    2024-04-20 15:38:02       22 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-20 15:38:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-20 15:38:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-20 15:38:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-20 15:38:02       20 阅读

热门阅读

  1. 深入理解python中的subprocess模块

    2024-04-20 15:38:02       12 阅读
  2. 开发语言漫谈-PHP

    2024-04-20 15:38:02       16 阅读
  3. Django中如何实现防御CSRF攻击呢

    2024-04-20 15:38:02       20 阅读
  4. 开发语言漫谈-go

    2024-04-20 15:38:02       16 阅读
  5. docker配置项目镜像

    2024-04-20 15:38:02       14 阅读
  6. 算法 第45天 动态规划7

    2024-04-20 15:38:02       15 阅读
  7. 美食节目:视觉盛宴如何唤醒沉睡的食欲

    2024-04-20 15:38:02       16 阅读
  8. 带你认识Selenium函数

    2024-04-20 15:38:02       13 阅读
  9. 华为配置 dhcp snooping

    2024-04-20 15:38:02       14 阅读
  10. Yarn--npm Windows安装使用

    2024-04-20 15:38:02       15 阅读