synchronized和lock的区别

文章目录

  • synchronized和lock的区别
  • 公平锁和非公平锁
  • 可重入锁

synchronized和lock的区别

  • synchronized 是java的一个关键字,源码在 jvm 中,用 c++ 语言实现,synchronized在发生异常时会自动释放占有的锁,因此不会出现死锁。

  • Lock 是接口,源码由 jdk 提供,用 java 语言实现,不会主动释放占有的锁,必须手动来释放锁,可能引起死锁的发生。

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

    Lock 由java语言实现,所以比 synchronized 功能全,例如:
    1.几个线程争抢锁时,一个线程成功了,其他几个线程失败了,这时用lock锁可以获取争抢lock锁失败处于阻塞状态的线程
    2.Lock锁提供公平锁和非公平锁,synchronized只提供非公平锁。(非公平锁可以插队,所以效率更高)
    3.Lock锁有多个等待队列,snychronized只有一个等待队列。
    Lock.newCondition(“c1”),Lock.newCondition(“c2”);
    等待队列c1,c1.await(),让线程·进入等待队列c1,c1.signal()唤醒队列中一个线程。
    4.Lock 有多种实现实现,如 ReentrantLock(可重入锁), ReentrantReadWriteLock(可重入读写锁)允许多个线程同时进行读操作,而只有在没有任何读操作时才会进行写操作。
    5.可打断、可超时

  • 性能层面

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

公平锁和非公平锁

公平锁:多个线程去请求锁时,会按照请求锁的顺序去一一获取锁(线程会按顺序进入队列,队头线程获取锁)
在这里插入图片描述
优点:所有的线程都能得到资源,不会饿死在队列中。
缺点:cpu需要不停的唤醒被阻塞的线程,吞吐量会下降很多。

非公平锁:在一个合适的时机,允许后请求的线程直接去获取锁,

假设,线程5去获取一把锁时,线程1刚好释放锁,这时线程5就能直接插队,线程5获取不到锁,才会进入等待队列。这样做线程5既可以不用进入队列被唤醒,也可以直接省去线程2被唤醒的时间。(线程5执行时,这个时间唤醒线程2)。

优点:cpu不必唤醒所有线程,整体的吞吐率会提高,
缺点:有些线程一直获取不到锁,会被饿死。

可重入锁

可重入就是说某个线程已经获得某个锁,可以再次获取锁而不会出现死锁。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性代数基础概念和在AI中的应用

基本概念 线性代数是数学的一个分支,专注于向量、向量空间(也称为线性空间)、线性变换和矩阵的研究。这些概念在数据科学、人工智能、工程学和物理学等多个领域都有广泛应用。以下是这些基本概念的详细解释和它们在数据处理和AI中的应用。 …

社区热议!54.8k Star开源项目,GPT-4Free : 让GPT4免费不是梦

Hello,我是Aitrainee,GPT4Free就是最近传得沸沸扬扬的那个GPT4项目。大家都知道,虽然ChatGPT是免费的,但如果你想用到那些功能更强大的大模型,比如GPT-4、gemini-pro、claude,那就只能选择付费了。 但现在&…

C语言——程序拷贝文件

问题如下: 写一个程序拷贝文件: 使用所学文件操作,在当前目录下放一个文件data.txt,写一个程序,将data.txt文件拷贝一份,生成data_copy.txt文件。 基本思路: 打开文件data.txt,读…

【11】工程化

一、为什么需要模块化 当前端工程到达一定规模后,就会出现下面的问题: 全局变量污染 依赖混乱 上面的问题,共同导致了代码文件难以细分 模块化就是为了解决上面两个问题出现的 模块化出现后,我们就可以把臃肿的代码细分到各个小文件中,便于后期维护管理 前端模块化标准…

Flutter 事件传递简单概述、事件冒泡、事件穿透

前言 当前案例 Flutter SDK版本:3.13.2 本文对 事件传递只做 简单概述,主要讲解,事件传递过程中可能遇到的问题解决,比如 事件冒泡、事件穿透; 不是我偷懒,是自认为没有这几位写的详细、仔细&#xff0c…

防火墙在解决方案及典型项目中的应用

防火墙在解决方案及典型项目中的应用 防火墙作为基础安全防护产品,在各种解决方案、业务场景中配套应用,本节给出各类方案资料链接方便查阅。 防火墙在华为网络解决方案中的应用 解决方案 文档 主要应用 CloudFabric云数据中心网解决方案 资料专区…

如何查看局域网内所有的ip和对应的mac地址

1、windows下查看 方法一、 按快捷键“winr”打开运行界面,输入“CMD”回车: 输入以下命令: for /L %i IN (1,1,254) DO ping -w 1 -n 1 192.168.0.%i 其中 192.168.0.%i 部分要使用要查询的网段,比如 192.168.1.%i 192.168.137.%i 172.16.2…

Protege的推理机

最近一直在使用Protege软件,来构建本体和知识图谱。其中还涉及到了如何指定规则进行推理,需要SWRL(使用这个插件能够比较简单创建规则)这个插件,但我一直找不到这个tab在哪里,但是我确信的是一定存在这个插件,因为prot…

vue-quill-editor和vue-ueditor-wrap富文本编辑器应用

目录 一、vue-quill-editor 1.1、界面展示 1.2、代码介绍 1.2.1、安装 1.2.2、配置 1.2.3、代码应用 1.2.4、提取内容 二、vue-ueditor-wrap 2.1、界面展示 2.2、代码介绍 2.2.1、安装 2.2.2、配置 2.2.3、代码应用 一、vue-quill-editor 1.1、界面展示 文本输出…

Mysql学习--深入探究索引和事务的重点要点与考点

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板

CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板 —— 杭州 2024-03-20 凌晨1:06 code review! 文章目录 CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板1.通用CMakeLists.txt模板2.GPT4给出的改进建议3.git clon…

【项目实践Day06】异步请求与同步请求+Ajax+微信小程序上实现发送异步请求

什么是同步和异步 同步 在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务。也就是一旦调用开始,就必须等待其返回结果,程序的执行顺序和任务排列顺序一致。客户端必须等待服务器端的响应。在等待的期间客…

继承和多态(1)(继承部分)

继承 继承的概念 上文就是继承的概念。 必须记住父类也可以称为基类,超类。 子类也可以称为派生类。 继承的语法 在Java中如果要表示类之间的继承关系,需要借助extends关键字,具体如下: 修饰符 class 子类 extends 父类 {//…

一、SpringBoot基础搭建

本教程主要给初学SpringBoot的开发者,通过idea搭建单体服务提供手把手教学例程,主要目的在于理解环境的搭建,以及maven模块之间的整合与调用 源码:jun/learn-springboot 以商城项目为搭建例子,首先计划建1个父模块&…

用 二层口 实现三层口 IP 通信的一个实现方法

我们一般用 undo portswitch 来将二层口转为三层口,但如果设备不支持的话,那么。。。 一、拓朴图: 二、实现方法: 起一个 vlan x,配置 vlanif地址,然后二层口划分到 vlan x 下,对端做同样的配置…

一文带你弄懂JVM与JAVA体系结构

文章目录 1.JVM 与 Java 体系结构1.1. 前言1.2. 一些参考书目1.3. Java 及 JVM 简介1.4. Java 发展的重大事件1.5. 虚拟机与 Java 虚拟机1.6. JVM 的整体结构1.7. Java 代码执行流程1.8. JVM 的架构模型1.9. JVM 的生命周期 1.JVM 与 Java 体系结构 1.1. 前言 作为 Java 工程…

用Compute Shader处理图像数据后在安卓机上不能正常显示渲染纹理

1)用Compute Shader处理图像数据后在安卓机上不能正常显示渲染纹理 2)折叠屏适配问题 3)Prefab对DLL中脚本的引用丢失 4)如何优化Unity VolumeManager中的ReplaceData 这是第378篇UWA技术知识分享的推送,精选了UWA社区…

长安链智能合约标准协议第二草案——BNS与DID协议邀请社区用户评审

长安链智能合约标准协议 在智能合约编写过程中,不同的产品及开发人员对业务理解和编程习惯不同,即使同一业务所编写的合约在具体实现上也可能有很大差异,在运维或业务对接中面临较大的学习和理解成本,现有公链合约协议规范又不能完…

RabbitMQ问题

如何实现顺序消费? 消息放入到同一个队列中消费 如何解决消息不丢失? 方案: 如上图:消息丢失有三种情况,解决了以上三种情况就解决了丢失的问题 1、丢失1--->消息在到达交换机的时候;解决&#xff1…

记录解决问题--activiti8.2 流程图图片由png改为svg前端不显示图片问题

1.说明 如果是vue svg显示,请查阅其他标准资料,类似使用svg标签。我这里讲的另外一种情况,链接返回的是svg文件,需要用v-html显示图片。 2.activiti6流程图图片格式 ①png格式。可以查看链接返回,以png开头。 ②前端…