【java面试题】lock和synchronized有什么区别?

2023-11-11

学习目标:

掌握 lock 与 synchronized 的区别 理解 ReentrantLock 的公平、非公平锁 理解 ReentrantLock 中的条件变量 lock 与 synchronized 的区别有三个层面

学习内容:

1.不同点

语法层面

  • synchronized 是关键字,源码在 jvm 中,用 c++ 语言实现

  • Lock 是接口,源码由 jdk 提供,用 java 语言实现

  • 使用 synchronized 时,退出同步代码块锁会自动释放,而使用 Lock 时,需要手动调用 unlock 方法释放锁

2.功能层面

  • 二者均属于悲观锁、都具备基本的互斥、同步、锁重入功能

  • Lock 提供了许多 synchronized 不具备的功能,例如获取等待状态、公平锁、可打断、可超时、多条件变量

  • Lock 有适合不同场景的实现,如 ReentrantLock, ReentrantReadWriteLock

3.性能层面

  • 在没有竞争时,synchronized 做了很多优化,如偏向锁、轻量级锁,性能不赖

  • 在竞争激烈时,Lock 的实现通常会提供更好的性能

4.公平锁

公平锁的公平体现

已经处在阻塞队列**中的线程(不考虑超时)始终都是公平的,先进先出

公平锁是指未处于阻塞队列中的线程来争抢锁,如果队列不为空,则老实到队尾等待

非公平锁是指未处于阻塞队列中的线程来争抢锁,与队列头唤醒的线程去竞争,谁抢到算谁的

公平锁会降低吞吐量,一般不用

5.条件变量

  • ReentrantLock 中的条件变量功能类似于普通 synchronized 的 wait,notify,用在当线程获得锁后,发现条件不满足时,临时等待的链表结构

  • 与 synchronized 的等待集合不同之处在于,ReentrantLock 中的条件变量可以有多个,可以实现更精细的等待、唤醒控制

代码说明

day02.TestReentrantLock 用较为形象的方式演示
ReentrantLock 的内部结构

学习产出:

<font color=#999AAA
代码说明

day02.TestReentrantLock 用较为形象的方式演示 
ReentrantLock 的内部结构
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【java面试题】lock和synchronized有什么区别? 的相关文章

随机推荐

  • kali 破解压缩包密码

    一 提取加密压缩包的哈希值 zip2john 文件名 gt hash txt zip2john 文件名 能提取出文件的哈希值 然后我们通过重定向 将它写入一个文档中 二 利用工具对提取到的哈希值进行破解 john hash txt 然后就能
  • windows11安装微软商店里的ubuntu报错,已解决

    1 问题情况 安装微软商店的Ubuntu系统 安装完成后打开开始菜单的Ubuntu图标 初始化过程中卡住 点击界面下方的展开按钮有文字提示报错 报错提示内容为 Installing this may take a few minutes W
  • 京东抢购服务高并发实践

    声明 本位来自京东张开涛的微信公众号 kaitao 1234567 授权CSDN转载 如需转载请联系作者 作者 张子良 京东高级开发工程师 在京东负责抢购后端服务系统架构和开发工作 责编 钱曙光 关注架构和算法领域 寻求报道或者投稿请发邮件
  • eclipse与Mysql数据库是否连接的检验

    先去下载与Mysql数据库版本匹配的架包 然后导入到项目中 在这里我用的是Mysql8 0 Mysql8 0的驱动类名是 com mysql cj jdbc Driver 首先新建一个Demo类 然后进行数据库的连接即检验 代码如下 pac
  • Java架构直通车——基于数据库for update实现分布式锁

    文章目录 使用数据库解决超卖问题 非分布式 分为三步 原始方法 合并二 三步 使用update行锁使操作下沉到数据库 合并一 二 三步 使用方法锁 优化 使用块锁 使用数据库解决分布式超卖问题 主要原理 解决方案 解决库存超卖问题 可以另扣
  • 转帖:C++大师Lippman:我对中国程序员的忠告

    天极网特稿 记者 宋保强 C 语言的创立者 斯坦 利普曼 Stan Lippman 9月17日参加了在北京召开的微软技术大会Tech Ed2004并做了 The C Binding Integrating a Static and dyna
  • 嵌套循环基础练习题

    目录 java循环以及循环嵌套练习题 01 求10以内的偶数的和 02 求100以内的所有素数 素数 一个大于1的自然数 除了1和它本身外 不能被其他自然数整除 03 随机产生一个1 100之间的整数 看能几次猜中 要求 猜的次数不能超过7
  • CloudEvents 入门文档

    CloudEvents 入门文档 1 0 3 版本 文档来自 GitHub CloudEvents 摘要 这份非技术规范文档用来为你提供关于 CloudEvents 规范的总体概览 它补充了 CloudEvents 规范的相关背景以及在制定
  • midjourney最新使用方法教程指令关键词

    自ChatGPT走红以来 以 聊天 为核心的人工智能协作工具们受到了各行各业的关注 让AI写首诗 发封邮件 或是做一份计划书 这些工作已经成为AI聊天机器人的 日常需求 但似乎 人们遗忘了AI还具有创作文字以外的内容 比如 一幅画 2022
  • [完美解决]VS2012创建或打开C++浏览数据库文件时出现错误

    完美解决 VS2012创建或打开C 浏览数据库文件时出现错误 在使用VC2012的时候出现问题如下 创建或打开C 浏览数据库文件XXXXXXX stdf时发生错误 IntelliSense和浏览信息将不能用于C 项目 请确保已安装Micro
  • 全自动高清录播服务器,常态化高清录播服务器 高清全自动录播系统

    特点 支持高清视频会议终端1080P 720P下的录制 点播和直播 双流录制可到高两路1080P 60帧图像 支持把录制下来的会议或者培训内容直播给网内所有的客户端 PC和视频会议终端 支持IPhone IPAD 安卓系统等点播和直播 设计
  • BitLocker的解密

    BitLocker的解密 解密 以管理员身份运行命令提示符 然后在里面输入命令 C指的是盘符 这里以解密C为例 manage bde off C 弹出所有用法 manage bde 更多使用方法 可参考官网 https docs micro
  • win11打开应用被管理员阻止怎么办 window11管理员已阻止你运行此应用的解决方法

    大家在使用windows11系统时 是否有出现过电脑运行应用被阻止的情况呢 可能很多人的蒙着不知道如何处理这个问题 下面就和大家分享一下解决方法吧 更多Windows11安装教程 可以参考小白重装系统网 1 用鼠标右键单击开始图标 接着在出
  • TCP和UDP

    文章目录 TCP和UDP 什么是TCP 用JAVA实现一个基于TCP的简单网络通信 什么是UDP 用JAVA实现一个基于UDP的网络通信 TCP和UDP 什么是TCP TCP即传输控制协议 Transmission Control Prot
  • 【Unity学习笔记】Animation、Input类

    Animation Animation View 通过动画视图可以直接创建和修改动画片段 Animation Clips 显示动画视图 Window Animation 创建动画片段 为物体添加Animation组件 在动画视图中创建片段
  • Maven、JDK的安装以及环境配置

    Maven 项目管理工具 什么是Maven Maven是一个项目管理工具 它包含了一个对象模型 一组标准集合 一个依赖管理系统 和用来运行定义在生命周期阶段中插件目标和逻辑 核心功能 Maven的核心功能是合理叙述项目间的依赖关系 通俗点就
  • 端口转发工具 rinetd 的使用

    rinetd 可以将服务器的端口转发到另一个端口 1 安装rinetd 服务 vi etc yum repos d nux misc repo 输入以下内容报存 nux misc name Nux Misc baseurl http li
  • c++与c#的区别

    1 继承 C 支持多继承 C 类只能继承一个基类中的实现但可以实现多个接口 2 数组 声明 C 数组和声明 C 数组的语法不同 在 C 中 标记出现在数组类型的后面 3 数据类型 在C 中bool类可以与整型转换 但C 中bool 类型和其
  • 脚本ssh进入其他主机报错--bash: jps: command not found和Error: JAVA_HOME is not set and java could not be found

    文章目录 一 报错图例 二 报错原因 三 解决方案 三种 一 报错图例 二 报错原因 原因 在shell脚本写的ssh到其他节点的时候默认是不加载配置文件的 linux并不能去找到java中jps的命令和java的path路径等 三 解决方
  • 【java面试题】lock和synchronized有什么区别?

    学习目标 掌握 lock 与 synchronized 的区别 理解 ReentrantLock 的公平 非公平锁 理解 ReentrantLock 中的条件变量 lock 与 synchronized 的区别有三个层面 学习内容 1 不同