大厂面试真题-Synchronized和ReentrantLock怎么选

news2024/10/1 21:30:08

在选择synchronizedReentrantLock时,我们需要考虑多个方面,包括它们的特点、性能、以及具体的使用场景。以下是一些关键的比较点和建议:

1. 功能特性

  • 锁的公平性
    • synchronized是非公平锁,它无法控制线程的执行顺序。
    • ReentrantLock支持公平锁和非公平锁,通过构造函数可以选择是否使用公平锁。如果需要保证线程按照顺序执行,可以选择使用公平锁。
  • 中断响应
    • synchronized不支持锁的中断性。当一个线程在等待获取锁时,它不能被中断。
    • ReentrantLock支持锁的中断性。通过lockInterruptibly()方法,如果一个线程在等待获取锁时被中断,它将抛出InterruptedException异常。
  • 条件变量
    • synchronized不支持条件变量,因此无法实现复杂的线程同步场景。
    • ReentrantLock支持条件变量,可以通过newCondition()方法创建一个条件变量,用于实现更复杂的线程同步场景,如生产者-消费者模型。

2. 性能

  • 在Java早期版本中,synchronized的性能可能较差,因为它是基于操作系统的互斥量实现的。但在Java 6及以后的版本中,JVM对synchronized进行了优化,使得它的性能得到了显著提升。
  • ReentrantLock的性能通常优于synchronized,特别是在高并发场景下。但在低并发场景下,两者的性能差异不大。

3. 使用场景

  • 如果你的代码结构简单,且不需要太多的同步控制,或者对性能要求不是特别高,可以选择使用synchronized。它简单易用,且JVM对其进行了优化,性能已经相当不错。
  • 如果你需要更多的功能,如公平锁、中断响应、条件变量等,或者你的应用是高并发的,那么ReentrantLock可能是更好的选择。它提供了更灵活的锁控制机制,可以更好地满足复杂场景下的需求。

4. 其他考虑

  • 可重入性:两者都支持可重入性,即一个线程可以多次获取同一个锁而不会导致死锁。
  • 锁的释放:在使用ReentrantLock时,需要在finally块中释放锁,以避免死锁。而synchronized则会自动释放锁。

综上所述,选择synchronized还是ReentrantLock取决于你的具体需求和使用场景。在大多数情况下,synchronized已经足够满足需求,并且由于其简单性和性能优化,它通常是首选。然而,在需要更复杂的同步控制或更高性能的场景下,ReentrantLock可能是更好的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2183185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8. Bug 与 Error

计算机程序中的缺陷通常被称为 bug。把它们想象成偶然爬进我们工作中的小东西,会让程序员感觉良好。当然,实际上是我们自己把它们放进去的。 如果程序是思想的结晶,我们可以将错误大致分为思想混乱造成的错误和将思想转化为代码时引入错误造成…

帝都程序猿十二时辰

前言 2019年度国产剧《长安十二时辰》火了,其口碑榜首、节奏紧凑、贴合原著、电影质感,都是这部剧的亮点。而最令人震撼的还是剧中对大唐盛世的还原,长安街坊的市容市貌、长安百姓的生活日常、长安风情的美轮美奂……而关于十二时辰的话题也接…

基础算法--双指针【概念+图解+题解+解释】

更多精彩内容..... 🎉❤️播主の主页✨😘 Stark、-CSDN博客 本文所在专栏: 数据结构与算法_Stark、的博客-CSDN博客 其它专栏: 学习专栏C语言_Stark、的博客-CSDN博客 项目实战C系列_Stark、的博客-CSDN博客​​​​​​ 座右铭&a…

【算法竞赛】堆

堆是一种树形结构,树的根是堆顶,堆顶始终保持为所有元素的最优值。 有最大堆和最小堆,最大堆的根节点是最大值,最小堆的根节点是最小值。 本节都以最小堆为例进行讲解。 堆一般用二叉树实现,称为二叉堆。 二叉堆的典型应用有堆排序和优先队列。 二叉堆的概念 二叉堆是一棵…

Mybatis-Plus新花样(二)

多种插件 Mybatis-plus给我们提供了各种各样的插件,方便我们快捷开发。 一. 插件配置 Configuration public class MybatisPlusConfig {Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor new MybatisPlusInter…

CMIS5.2_光模块切应用(Application Selection and Instantiation)

目录 重要概念 DP配置、应用声明、应用码的区别 Control Set Provision 和 Commission ApplyDPInit 和 ApplyImmediate 判断应用是否切换成功 以800G光模块的3个应用对应的DP配置举例 1*800G应用: 2*400G应用: 8*100G应用: 应用声明…

ControlGAN:Controllable Text-to-Image Generation

1 研究目的 当前的生成网络通常是不可控的,这意味着如果用户更改句子的某些单词,合成图像将与原始文本生成的合成图像显着不同;当给定的文本描述(例如颜色)发生变化时,鸟类的相应视觉属性被修改&#xff0c…

我博客网站又遭受CC攻击了,记录一下

2024.9.29凌晨4点攻击开始,攻击目标是我的图床tc.zeruns.tech和博客blog.zeruns.tech,图床用的cdn是多吉云融合CDN,流量被刷了20GB左右就触发峰值关闭CDN了,HTTPS请求次数被刷了1.1亿次,因为设置了QPS,实际…

Oracle bbed编译安装及配置

1. 什么是bbed ? Oracle Block Brower and EDitor Tool,是一个可以对oracle data block进行查看,编辑修改的内置工具。对于bbed,oracle本身是不提供支持的。 2. 如何编译bbed环境? 10g版本: 1) 编译bbed cd $ORACL…

【网络基础】网络常识快速入门知识清单,看这篇文章就够了

💐个人主页:初晴~ 在现在这个高度智能化的时代,网络几乎已经成为了空气一般无处不在。移动支付、网上购物、网络游戏、视频网站都离不开网络。你能想象如果没有网络的生活将会变成什么样吗🤔 然而如此对于如此重要的网络&#xf…

深度学习500问——Chapter17:模型压缩及移动端部署(2)

文章目录 17.4.6 低秩分解 17.4.7 总体压缩效果评价指标有哪些 17.4.8 几种轻量化网络结构对比 17.4.9 网络压缩未来研究方向有哪些 17.5 目前有哪些深度学习模型优化加速方法 17.5.1 模型优化加速方法 17.5.2 TensorRT加速原理 17.5.3 TensorRT如何优化重构模型 17.5.4 Tensor…

Unity中Mesh多种网格绘制模式使用方法参考

Unity中MeshFilter中的Mesh默认情况下使用MeshTopology.Trigangles类型绘制网格,就是通常的绘制三角形网格,实际上Mesh有五种绘制模式,对应MeshTopology的枚举,分别是 Triangles网格由三角形构成。Quads网格由四边形构成。Lines网…

多线程——认识线程(Thread)

目录 前言 一、第一个多线程程序 1.程序编写 2.介绍jconsole 二、创建线程 1.继承Thread类 ①重写run方法 ②重写run方法,使用匿名内部类 2.实现Runnable接口 ①重写run方法 ②重写run方法,使用匿名内部类 ③使用 lambda 表达式 三、多线程…

【吊打面试官系列-MySQL面试题】为表中得字段选择合适得数据类型

大家好,我是锋哥。今天分享关于【为表中得字段选择合适得数据类型】面试题,希望对大家有帮助; 为表中得字段选择合适得数据类型 字段类型优先级: 整形>date,time>enum,char>varchar>blob,text 优先考虑数字类型,其次是…

c++类与对象二

文章目录 C类与对象二类的实例化类对象内存大小计算this指针特性 C类与对象二 类的实例化 用类创建对象的过程,称之为类的实例化 类是对对象进行描述的,限定了类有哪些成员,定义一个类并没有开辟内存空间。例如需要学生填写的个人表格&…

js 如何获取当日零点整的时间戳

最近遇到个问题需要取当日的零点整的时间戳去存取日程 上代码: const timestr new Date().setHours(0, 0, 0, 0) console.log(timestr) 效果展示: Tips:除了 Java 以外的语言需要除以1000 具体视情况而定 Java、js的时间戳都是毫秒级的…

每日一练:腐烂的橘子

994. 腐烂的橘子 - 力扣(LeetCode) 题目要求: 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。 每分钟&#xf…

leetcode35--搜索插入位置--二分查找刷题

搜索插入位置 一共会出现下面四种情况: 目标值在数组所有元素之前 目标值等于数组中某一个元素 目标值插入数组中的位置 目标值在数组所有元素之后 首先在二分查找的代码之前处理掉目标值在数组所有元素之前和之后的情况如果目标值在数组中的某个位置&#xff0c…

51单片机系列-按键检测原理

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 独立按键是检测低电平的。 下面我们来看一张对应的电路原理图: 在这张图当中,P1,P2,P3内部都上拉了电阻,但是P0没有&am…

学习记录:js算法(四十九):二叉树的层序遍历

文章目录 二叉树的层序遍历网上思路队列循环 总结 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的层序遍历 。 (即逐层地,从左到右访问所有节点)。 图一: 示例 1:如图一 输入:roo…