面试:lock 和 synchronized

embedded/2024/10/18 1:36:18/

一、语法层面

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

二、功能层面

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

三、性能层面

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

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

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

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


http://www.ppmy.cn/embedded/4045.html

相关文章

(二十)C++自制植物大战僵尸游戏僵尸进攻控制实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/8UFMs 文件位置 实现功能的代码文件位置在Class\Scenes\GameScene文件夹中,具体如下图所示。 ZombiesAppearControl.h /* 僵尸出现波数控制 */ class ZombiesAppearControl { public:/***对于进攻的不同波数…

Elasticsearch:如何将 MongoDB 数据引入 Elastic Cloud

作者:Hemendra Singh Lodhi Elastic Cloud 是由 Elastic 提供的基于云的托管服务。Elastic Cloud 允许客户在亚马逊网络服务 (AWS)、谷歌云平台 (GCP) 和微软 Azure 上部署、管理和扩展他们的 Elasticsearch 集群。 MongoDB 是一种流行的 NoSQL 文档导向数据库&am…

写一个uniapp的登录注册页面

目录 一、效果图 二、代码 1、登录 (1)页面布局代码 (2)逻辑实现代码 (3)css样式 2、注册 (1)页面布局代码 (2)逻辑实现代码 (3&#x…

美国家安全局等发布安全部署人工智能系统指南

该指南旨在为部署和运行由其他实体设计和开发的人工智能系统的组织提供最佳实践。 2024年4月15日,美国国家安全局发布了名为《安全部署人工智能系统:部署安全、弹性人工智能系统的最佳实践》,该指南旨在为部署和运行由其他实体设计和开发的人…

蓝桥杯-单片机组基础21——第15届省赛代码

目录 0.比赛题目回忆 1. 底层头文件 2.底层文件 3.主函数文件 做下来感觉,主观题第15届比14届稍微简单一些,但是出其不意考了DAC 本届客观题有点难,做选择感觉把握性不大,多选比较多 万幸比赛前一天做出了第14届的题&#x…

03-JAVA设计模式-中介者模式

中介者模式 什么是中介者模式 中介者模式(Mediator Pattern)是一种行为设计模式,用于减少对象之间的直接依赖关系,降低它们之间的耦合度,并使得一个对象改变时,所有依赖于它的对象都得到通知并自动更新。…

设计模式:中介者模式代码案例

文章目录 示例1示例代码 示例2示例代码 示例1 一个智能家居控制系统。在这个系统中,我们有多个设备,如灯光、窗帘、空调等,它们之间需要相互协作以达到智能控制的目的。例如,当我们说“晚安”时,系统需要关闭灯光、拉…

Ubuntu的用户、组、权限(ACL)管理

目录 用户创建用户删除用户查看(非系统)用户 组查看所有组创建组删除组改变用户所在组从组中移除用户将用户追加到其他组 id查看用户以及所属组名字和id查看用户id查看所属组查看所属组id查看所属组名字 查看有效用户组(主组)查看有效用户组(主组)id查看有效用户组(主族)名字 权…