面试-synchronized(java5以前唯一)和ReentrantLock的区别

news2024/11/9 10:08:01

1.ReentrantLock(再入锁):
(1).在java.util.concurrent.locks包
(2).和CountDownLatch,FutureTask,Semaphore一样基于AQS实现。
AQS:AbstractQueuedSynchronizer
队列同步器。Java并发用来构建锁或其他同步主键的基础框架,是j.u.c package的核心。一般使用的方式是继承。还有各种基于CAS的基础操作方法。
AQS的核心内容:state以及先入先出的等待线程队列等待
在这里插入图片描述
利用AQS实现同步结构,至少调用两种方法。分别是acquire方法,获取资源的独占权。Realease释放对于某个资源的独占。
(3).能够实现比synchronized更细力度的控制。如:控制fairness(公平性)
(4).调用lock()之后,必须调用unlock()释放锁
(5).性能未必比synchronized高,并且也是可重入的。在低竞争场景中synchronized可能相对优势。

ReentrantLock公平性设置:
0,1相继获取(每个线程获取到锁的概率是一样的)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
ArrayBlockingQueue
数组实现的线程安全的,有界的阻塞队列。内部通过互斥锁保护线程资源。互斥锁是通过
ReentrantLock实现的。
ArrayBlockingQueue与newCondition是组合关系
newCondition依赖于ArrayBlockingQueue实现
ArrayBlockingQueue通过await()和signal()的组合优雅的完成条件判断和通知等待

在这里插入图片描述
在这里插入图片描述
实际应用场景:ArrayBlockingQueue是数组实现的,线程安全的,有界的阻塞队列。内部互斥锁是通过ReentrantLock实现的。

总结:
在这里插入图片描述

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

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

相关文章

vue3通过vue-video-player实现视频倍速、默认全屏、拖拽进度条等功能

效果图: 1、场景: js原生的video标签在不同浏览器及不同型号手机上都展示的不一样,一部分没有倍速,一部分没有全屏等功能,为了统一视频播放的交互功能,使用vue-video-player插件来完成,vue-vid…

3_电机的发展及学习方法

一、电机组成及发展 1、什么是励磁? 在电磁学中,励磁是通过电流产生磁场的过程。 发电机或电动机由在磁场中旋转的转子组成。磁场可以由 永磁体或励磁线圈产生。对于带有励磁线圈的机器,电流必须在线圈中流动才能产生(激发&#x…

基于JSP的列车票务信息管理系统

开头语: 你好,我是专注于计算机科学与技术研究的学长。如果你对列车票务信息管理系统感兴趣或有相关需求,欢迎联系我。 开发语言:Java 数据库:MySQL 技术:JSP技术 工具:IDE、数据库管理工具…

【java计算机毕设】网络教学平台java MySQL ssm vue html maven 项目设计 源代码+万字文档

目录 1项目功能 2项目介绍 3项目地址 1项目功能 【java计算机毕设】网络教学平台系统MySQL ssm vue html maven项目代码文档 小组作业 2项目介绍 系统功能: 网络教学平台系统包括管理员、学生、教师俩种角色。 管理员功能包括个人中心模块用于修改个人信息和密码…

HBDNY-40/1端子排电压继电器 DC110V 导轨安装 约瑟JOSEF

HBDNY系列端子排型电压电流继电器 系列型号:(3、4过/低电压型,5、6过/低电流型) HBDNY-30/1端子排型电压继电器;HBDNY-30/2端子排型电压继电器; HBDNY-30/3端子排型电压继电器;HBDNY-30/4端子…

芒果YOLOv10改进64:主干Backbone篇RepVGG结构:简单但功能强大的卷积神经网络架构

💡本篇内容:YOLOv10改进RepVGG结构:简单但功能强大的卷积神经网络架构 💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv10 按步骤操作运行改进后的代码即可 💡本文提出改进 原创 方式:二次创新,YOLOv10 应部分读者要求,新增一篇RepVGG 论文理论部分 + 原创最…

AI视频教程下载-定制GPT:使用您的数据创建一个定制聊天GPT

Custom GPTs_ Create a Custom ChatGPT with Your Data 构建一个定制的GPT,与您自己的数据进行聊天。添加文档,生成图像,并集成API和Zapier。 这门全面的Udemy课程专为那些渴望学习如何创建自己定制版ChatGPT的人设计,以满足他们…

Java 面试笔记 | Java 基础:线程池

前言 在日常的工作学习生活中,用一种好的方法去学习,可以更加有效,比如费曼学习法:将学到的知识用自己的组织的语言表达出来,如果能够清晰明白的向别人解释清楚,那么就说明你是真的懂了,学会了…

常用调试器的接口介绍、支持标准及接线方法

目录 一、STLink接口介绍及接线方法 二、DAPLink接口介绍及接线方法 三、推荐购买链接🔗 一、STLink接口介绍及接线方法 第一种: 有10个接口,其中SWIM是STM8专用引脚。 查阅资料发现仅支持SWD标准,不支持JTAG标准。我们就知道…

深入理解桥接模式(Bridge Pattern)及其实际应用

引言 在软件开发过程中,设计模式为我们提供了优雅且高效的解决方案,以应对常见的设计问题。桥接模式(Bridge Pattern)作为一种结构型设计模式,旨在将抽象部分与其实现部分分离,使它们可以独立变化&#xf…

老杨说运维 | 基于业务全链路的端到端排障分析(文末附现场视频)

前言 青城山脚下的滔滔江水奔涌而过,承载着擎创一往无前的势头,共同去向未来。2024年6月,双态IT成都用户大会擎创科技“数智化可观测赋能双态运维”专场迎来了完满的收尾。 本期回顾来自擎创科技产品总监殷传旺的现场演讲:云原生…

雨量传感器设备的监测控制和智慧运维

雨量传感器是一种用于测量降雨量的设备,它通常通过一些感应机制来检测雨水的数量或强度。雨量传感器在气象监测、农业、水利等领域有着广泛应用。 在气象领域,它能为天气预报和气候研究提供重要的数据支持;在农业方面,可以帮助农民…

从零开始如何学习人工智能?

我接触AI的时候,是在研一。那个时候AlphaGo战胜围棋世界冠军李世石是大新闻,人工智能第一次出现我面前,当时就想搞清楚背后的原理以及这些技术有什么作用。 就开始找资料,看视频。随着了解的深入,对AI的兴趣就越大。这…

【已解决】Python报错:AttributeError: module ‘json‘ has no attribute ‘loads‘

😎 作者介绍:我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun,视频号:AI-行者Sun 🎈 本文专栏:本文收录于《AI实战中的各种bug…

snakeyaml从1.x升级2.x的方案

一、背景 因公司漏洞扫描,发现SnakeYAML 反序列化漏洞(CVE-2022-1471),所以要求对SnakYaml进行升级。 因项目中未直接引用snakyaml包,经分析是springboot引用的这个包。但是在这个项目中,springboot用的版本是2.3.12.RELEASE版本…

Linux系统学习——指令四

Linux系统学习——指令四 Linux 系统学习——指令四查看文件MD5校验和fuser 指令基本语法常用选项访问类型使用示例 系统信息 Linux 系统学习——指令四 查看文件MD5校验和 在Linux中,你可以使用 md5sum 命令来查看一个文件的MD5校验和。以下是具体的操作方法&…

【C语言】解决C语言报错:Invalid Pointer

文章目录 简介什么是Invalid PointerInvalid Pointer的常见原因如何检测和调试Invalid Pointer解决Invalid Pointer的最佳实践详细实例解析示例1:未初始化的指针示例2:已释放的指针示例3:返回局部变量的指针示例4:野指针 进一步阅…

常见的结构型设计模式

设计模式(二) 常见的结构型模式 1.代理模式: 提供一种代理方法 ,来控制对其他对象的访问。在有些情况下,一个对象不能或者不适合直接访问另一个对象,而代理对象可以在这两个类之间起一个中介的作用。 举例&#xf…

Qt 实战(6)事件 | 6.1、事件机制

文章目录 一、事件1、基本概念2、事件描述3、事件循环4、事件分发4.1、QApplication::notify()4.2、QObject::event() 5、事件传递6、事件处理器 前言: Qt 框架中的事件机制(Event Mechanism)是一种核心功能,它允许应用程序以事件…

仓库管理系统04--创建业务逻辑

1、添加业务逻辑类 然后依次添加其他的类 2、创建所有DB操作的接口类 3、业务逻辑实现接口类 实现接口的客户类方法 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq;namespace…