当前位置: 首页 > news >正文

java八股文面试[多线程]——synchronized 和lock的区别

 

其他差别:

synchronized是隐式的加锁,lock是显式的加锁;
synchronized底层采用的是objectMonitor,lock采用的AQS;
synchronized在进行加锁解锁时,只有一个同步队列和一个等待队列, lock有一个同步队列,可以有多个等待队列;
synchronized使用了object类的wait和notify进行等待和唤醒, lock使用了condition接口进行等待和唤醒(await和signal);
lock支持个性化定制, 使用了模板方法模式,可以自行实现lock方法;
Lock是一个接口,为了使用一个Lock对象,需要用到;
Lock lock = new ReentrantLock();

synchronized和ReentrantLock 区别:

效率区别:

  • 如果竞争比较激烈,推荐ReentrantLock去实现,不存在锁升级概念。而synchronized是存在锁升级概念的,如果升级到重量级锁,是不存在锁降级的。

底层实现区别:

  • 实现原理是不一样,ReentrantLock基于AQS实现的,synchronized是基于ObjectMonitor

功能向的区别:

  • ReentrantLock的功能比synchronized更全面

    • ReentrantLock支持公平锁和非公平锁

    • ReentrantLock可以指定等待锁资源的时间。

选择哪个:如果你对并发编程特别熟练,推荐使用ReentrantLock,功能更丰富。如果掌握的一般般,使用synchronized会更好

知识来源:

【并发与线程】线程加锁有哪些方式?synchronized和lock的区别?_哔哩哔哩_bilibili

【并发与线程】Sychronized的偏向锁、轻量级锁、重量级锁_哔哩哔哩_bilibili

百度安全验证

http://www.lryc.cn/news/150293.html

相关文章:

  • 实现一个简单的控制台版用户登陆程序, 程序启动提示用户输入用户名密码. 如果用户名密码出错, 使用自定义异常的方式来处理
  • Java 大厂八股文面试专题-设计模式 工厂方法模式、策略模式、责任链模式
  • Anaconda Prompt输入jupyter lab无反应
  • JavaScript Web APIs - 05 Window对象 、本地存储
  • Ansible学习笔记6
  • Linux挖矿程序清除
  • 使用Git和Github上传代码文件
  • OpenAI发布ChatGPT企业级版本
  • vue3中axios的使用方法
  • 【docker】容器的运行、停止、查看等基本操作
  • Python|OpenCV-鼠标自动绘制图像(4)
  • IDEA 设置提示信息
  • 清理docker镜像方法
  • windows 搭建 swoole开发环境(官网已支持)
  • matlab的基本使用
  • hznuoj---python查找最大字母
  • Leetcode---360周赛
  • CocosCreator3.8研究笔记(三)CocosCreator 项目结构说明及编辑器的简单使用
  • html5学习笔记18-web存储、web sql、web worker
  • 大数据专业毕业能从事什么工作
  • avalonia、WPF使用ScottPlot动态显示ECG心电图
  • 国内数学公式识别软件对比
  • SCOPE_IDENTITY什么意思
  • 构建现代应用:Java中的热门架构概览
  • Axure RP软件安装包分享(附安装教程)
  • 关于微信小程序的生命周期
  • 【数据结构】带头双向循环链表及其实现
  • 问道管理:日换手率达20是好是坏?
  • 勃艮第葡萄酒是如何分级的?
  • 使用awvs进行web安全扫描