面试:lock 和 synchronized

ops/2025/2/22 16:05:42/

一、语法层面

  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/ops/3923.html

相关文章

BOOT和UBOOT区别与联系

一、定义 1.1 Boot(启动) 在计算机和嵌入式系统的基本概念中,“boot”是指启动过程,这是一个系统从加电开始直至进入操作系统运行状态的过程。在嵌入式系统中,这个过程通常包括初始化硬件、加载并执行引导加载…

虚拟机下如何使用Docker(完整版)

Docker详细介绍: Docker 是一款开源的应用容器引擎,由Docker公司最初开发并在2013年发布。Docker的核心理念源自于操作系统级别的虚拟化技术,尤其是Linux上的容器技术(如LXC),它为开发人员和系统管理员提供…

docker部署SpringCloud微服务项目

我们写好的项目,都需要部署上线,今天就给大家介绍一下,如何将微服务项目部署上线,一般我们部署项目都是先在本地docker部署一遍,如果没有问题再部署到服务器,那么今天我就按照这个顺序来说 前置条件 微服…

【C++】List容器(1)-STL标准库-List举例说明-定义和初始化-成员函数的使用-运行效率对比-链接数据结构-和顺序表的对比

C学习:list容器详解(一) 1.STL标准库 C Standard Template Library(STL)是C编程语言的一个库,它提供了一系列模板化的数据结构(比如向量、列表、队列等)和算法(比如排序…

超越GPT-4V,苹果多模态大模型上新,神经形态计算加速MLLM(一)

4月8日,苹果发布了其最新的多模态大语言模型(MLLM )——Ferret-UI,能够更有效地理解和与屏幕信息进行交互,在所有基本UI任务上都超过了GPT-4V! 苹果开发的多模态模型Ferret-UI增强了对屏幕的理解和交互&am…

游戏前摇后摇Q闪E闪QE闪QA等操作

备注:未经博主允许禁止转载 个人笔记(整理不易,有帮助,收藏点赞评论,爱你们!!!你的支持是我写作的动力) 笔记目录:学习笔记目录_pytest和unittest、airtest_w…

WebStorm 2024.1.1 JavaScript集成开发环境 mac/win

JetBrains WebStorm是Jetrains拥有的一款JavaScript前端开发工具。被中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaSscript IDE”。与Int elliJ IDEA同源,继承了Int elliJ IDEA强大的JS功能。 主要功能包括智能代码补全、代码格式…

MCU的启动流程

微控制器单元(MCU)的启动流程是一系列精心设计的步骤,旨在确保设备从上电状态顺利过渡到正常运行状态。以下是这一过程的详细说明: 1. 上电复位(Power-on Reset) 上电:当MCU接入电源&#xff…