Java中锁的分类

news2024/11/16 5:33:26

乐观锁、悲观锁

乐观锁:不加锁的并发操作是安全的

可重入锁

RerntrantLock

当一个线程进入到一个同步方法中,然后在此方法中要调用另一个同步方法,

而且两个方法公用同一把锁

此时线程是可以进入到另一个同步方法中的。

读写锁

ReentrantReadWriteLock

读读共享,读写互斥、写写互斥

分段锁

jdk8之后,去除了真正的分段锁,concurrentHashMap内有给方法加锁;

把锁进一步细粒度化提高并发效率。

自旋锁 

获取锁的一种方式,例如原子类,当抢锁失败后,重试几次,抢到了就继续,抢不到线程阻塞。因

不断地进行尝试,会消耗cpu资源,因此适合时间短的线程,提高效率。

公平锁、非公平锁

公平锁:按照获取锁的顺序分配,ReentrankLock底层可以设置公平锁,默认是非公平锁         

 

构造方法参数为true设置公平锁。  

共享锁、独占锁

共享锁:多个线程共享同一把锁,读写锁中的读读操作

独占锁:synchronized ReentrankLock,读写锁中的写操作

锁的状态

1.无锁

2.偏向锁:一段同步代码被一个线程一直访问,该线程就会自动获取锁,降低获取锁的代价。

3.轻量级锁:在偏向锁的基础上,如果有其他线程访问,将会升级为轻量级锁,让线程以自旋的方式获取锁,线程不会阻塞。

4.重量级锁:当锁为轻量级锁时,自旋不会一直持续下去,达到一定次数后,还没有获取到锁,就会进入阻塞状态,该锁膨胀为重量级锁。当高并发时,获取不到锁的进入阻塞状态,等待操作系统调度

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

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

相关文章

LabVIEW继电保护测试仪自动检测系统

系统是LabVIEW软件平台和STM32F407系列微控制器的融合,提供了一种高效的解决方案,用于继电保护测试仪的自动化控制和数据采集。系统中使用了福禄克8508A型高精度数字多用表和泰克TDS2024型示波器等设备,以确保测试数据的准确性和可靠性。软件…

macOS安装VMware Fusion 13试用版本

1.下载: Download VMware Fusion | VMware 保存到桌面 下载成功: 双击dmg文件运行安装 安装成功 <

JVM篇--垃圾回收高频面试题

JVM垃圾回收 1 简单说下Java垃圾回收机制&#xff1f; 首先在java运行过程中&#xff0c;其实程序员并不需要去显示的调用程序来释放对象的内存&#xff0c;而是由虚拟机来完成的&#xff0c;具体来看是在jvm中有个垃圾回收线程&#xff0c;这个线程是个守护线程&#xff0c;…

LeeCode 42. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1]…

HarmonyOS NEXT 既是大势所趋,也是“众望所归”,2024你如何选择?

鸿蒙开发最近两个月估计是程序员圈的焦点话题。自从业内人事传出2024鸿蒙HarmonyOS Next版不在兼容安卓后,紧接着余承东高调宣布’’2024年将是原生鸿蒙的关键一年’’,再加上各大厂陆续宣布拥抱鸿蒙生态&#xff0c;使的相关话题就没停过。 01、鸿蒙系统到底是个啥 俺简单来…

HarmonyOS【应用服务开发】在模块中添加Ability

Ability是应用/服务所具备的能力的抽象&#xff0c;一个Module可以包含一个或多个Ability。应用/服务先后提供了两种应用模型&#xff1a; FA&#xff08;Feature Ability&#xff09;模型&#xff1a; API 7开始支持的模型&#xff0c;已经不再主推。Stage模型&#xff1a;AP…

C 语言->编译和链接实现原理

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青-CSDN博客 今天学习&#xff1a;浅学编译和链接内部实现原理 前提&#xff1a;本文是在gcc编译环…

使用 Picocli 开发 Java 命令行,5 分钟上手

大家好&#xff0c;我是鱼皮&#xff0c;对不会前端的同学来说&#xff0c;开发 命令行工具 是一种不错的展示系统功能的方式。在 Java 中开发命令行工具也很简单&#xff0c;使用框架&#xff0c;几分钟就能学会啦~ Picocli 入门 Picocli 是 Java 中个人认为功能最完善、最简单…

网工内推 | 网络工程师,CCNP认证优先,带薪年假,补贴多

01 极三科技 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、门店网络运维 2、门店网络项目支持 3、配合店铺Support team处理网络相关问题 任职要求&#xff1a; 1、大专及以上相关学历 2、3年以上相关工作经验 3、精通Cisco 路由器&#xff0c;交换机配置 4…

2.4G收发芯片遥控玩具方案开发,解决方案

2.4G遥控玩具是指通过2.4GHz无线信号进行遥控的玩具。这种玩具通常包括遥控器和遥控车、挖机、飞机、船等各种类型的模型。使用2.4G频段的遥控器可以提供更稳定和可靠的信号传输&#xff0c;具有较长的控制距离和较低的干扰。相比之前使用的其他频段的遥控器&#xff0c;2.4G遥…

前台vue配置

前台 vue环境 1.傻瓜式安装node: 官网下载&#xff1a;https://nodejs.org/zh-cn/2.安装cnpm: >: npm install -g cnpm --registryhttps://registry.npm.taobao.org3.安装vue最新脚手架: >: cnpm install -g vue/cli注&#xff1a;如果2、3步报错&#xff0c;清除缓…

第11章 GUI Page500~504 步骤三十二:打开画板文件02

各个图元类新增GetTypeName_Static()&#xff0c;并将原来的GetTypeName()改为调用静态方法实现&#xff1a; 直线&#xff1a; 圆&#xff1a; 十字&#xff1a; 矩形&#xff1a; 文字&#xff1a; tool_4_save_load.hpp添加两行 tool_4_save_load.cpp增加&#xff1a; 增加…

2024--Django平台开发-订单项目管理(十四)

day14 订单管理系统 1.关于登录 1.1 UI美化 页面美化&#xff0c;用BootStrap 自定义BooStrapForm类实现。 class BootStrapForm:exclude_filed_list []def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# {title:对象,"percent":对象}fo…

TestNG注释

目录 TestNG注释列表 BeforeXXX和AfterXXX注释放在超类上时如何工作&#xff1f; 使用BeforeXXX和AfterXXX TestNG注释 TestNG是一个测试框架&#xff0c;旨在简化广泛的测试需求&#xff0c;从单元测试&#xff08;隔离测试一个类&#xff09;到集成测试&#xff08;测试由…

SpringBoot——纯注解配置的Spring

1.环境搭建 1.1.创建工程 拷贝ssm工程&#xff1a; 1.2.待改造的问题 我们发现&#xff0c;之所以我们现在离不开xml配置文件&#xff0c;是因为我们有一处很关键的配置&#xff0c;如果他要也能用注解配置&#xff0c;那么我们就可以脱离xml文件了&#xff1a; 1.2.1.jdbc…

vuex前端开发,getters是什么?怎么调用?简单的案例操作

vuex前端开发,getters是什么&#xff1f;怎么调用&#xff1f;简单的案例操作&#xff01; 下面通过一些简单的案例&#xff0c;来了解一下&#xff0c;vuex当中的getters到底是什么意思&#xff0c;有哪些实际的操作案例。 Vuex的getters主要用于对store中的state进行计算或过…

使用jackson对java类中包含泛型属性的bean进行序列化和反序列化

最近在做项目时&#xff0c;需要对java的bean对象进行序列化转换为string字符串后&#xff0c;存入redis&#xff0c;然后再从redis中读取该string对象&#xff0c;反序列化为bean对象。正常的简单类型的对象使用jackson可以非常方便进行互为转换操作&#xff0c;但我们操作的对…

icu4c库中icudtl.dat文件剪裁

背景 在工程中需要把ansi编码转utf-8,引入icu4c库&#xff0c;默认编译出来的.dat文件有30多M&#xff0c;由于仅仅需在MacOS系统下要把Windows中的ansi编码转成utf-8&#xff0c;需要进行裁剪。 编译icu4c工程 源码下载&#xff1a;https://github.com/unicode-org/icu&…

HTML 属性

HTML 属性学习笔记 HTML 属性真的好神奇呢&#xff01;它们像是元素的额外说明&#xff0c;总是伴随着特定的格式出现在元素的开始标签里。接下来&#xff0c;我就记录下一些常见的 HTML 属性吧&#xff01; HTML 属性的基本概念 每个 HTML 元素都可以有自己的属性&#xff…