首页 > 编程语言 >Java中的锁

Java中的锁

时间:2024-10-11 12:47:27浏览次数:9  
标签:重入 Java 线程 公平 操作 资源 进行

:实现操作的同步或者可以说对操作公共的资源进行一个限制

锁的分类:

1.排他锁(重点)和共享锁

排他锁:获得锁资源之后那么不能对这个资源进行任何的读写操作,这些操作就会进行阻塞

共享锁:获得锁资源之后,只能对这个资源进行相关的读操作不能对其进行写操作

案例: 就是在Mysql当中对一个数据进行 修改(增改删) 操作的时候就是对这个数据加上排他锁

加共享锁使用 select *** for updata 或者 select*** lock in share mode  

2.可重入锁和不可重入锁:

这个的主要区别就是在于一个线程是否可以实现多次获得同一个锁资源  可重入锁是可以的 不可重入锁是不可以的,最经典的就是AQS volatile关键在后期在JUC主题下会细说

3.乐观锁和悲观锁

对于乐观锁和悲观锁在我看来不是真正的锁而是一种思想的体现

乐观锁(无锁):简单来说不是通过锁的方式来实现对于资源的操作 典型案例就是CAS操作

主要的操作步骤:

四大参数:对象  地址偏移量  预期值  更新后的值

如果并发量高的话这个是会消耗大量系统的资源

后期在JUC会仔细说

悲观锁(加锁):对需要操作的资源先加上锁,只有获得锁的线程才能够对资源进行操作

4.单机锁和分布式锁

 单机锁:在单体架构中锁如ReentrantLock,Synchronized(后期会细说这二者之间的区别)

分布式锁(Redis来进行实现 后期会细说):在分布式的架构中多个系统需要对同一个系统进行操作的时候来实现的或者在售卖打折商品的时候防止超卖

比如 :  库仓服务进行补货的时候那么这个时候就需要对库存服务里面的商品的库存进行数据的修改 用户正好下单对商品的库存进行减少的操作的时候,这个时候我们只能让其中一个服务来对库仓服务里面的数据进行操作不然的话会出现数据的不一致问题

5.公平锁和非公平锁

公平锁:在获取锁资源的时候就是需要判断阻塞队列中是否有正在等待获取资源的线程

非公平锁:与公平锁情况相反不需要判断阻塞队列中是否有正在等待获取资源的线程

特例: 就是说正好锁资源释放的时候,我实现了非公平锁那么就会之间进行加锁的操作这个时候就会加锁成功  最经典的就是reentrantlock

锁的汇总:

标签:重入,Java,线程,公平,操作,资源,进行
From: https://blog.csdn.net/2201_75397629/article/details/142752551

相关文章

  • Android Studio添加依赖 新版 和 旧版 的添加方式(Gradle添加依赖)(Java)
    旧版的(在线添加)1找文件在项目的build.gradle文件中添加依赖(在下面的节点中添加库格式’组:名字:版本号‘)dependencies{implementation'com.example:library:1.0.0'}implementation‘组:名字:版本号’添加完成之后上方会出现如下图提示(点击现在同步)(Sy......
  • Java项目: 基于SpringBoot+mybatis+maven+vue健身房管理系统(含源码+数据库+毕业论文)
    一、项目简介本项目是一套基于SpringBoot+mybatis+maven+vue健身房管理系统包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。项目都经过严格调试,eclipse或者idea确保可以运行!该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用......
  • AI 时代就业指南:Java 程序员如何转行做大模型?
    前言在人工智能(AI)迅速发展的背景下,从传统的编程领域如Java程序员转向大模型开发是一个既充满挑战也充满机遇的过程。对于Java程序员来说,这也是一个实现职业转型、提升薪资待遇的绝佳机遇。一、明确大模型概念简单来说,大模型就是具有大量参数和强大计算能力的人工智能模......
  • 小小初识java(29)-String小提升
    new和不new之间的区别?Stringx="OK";Stringy=newString("OK");不new的方式直接去常量池查看,如果有该单词,直接从常量池里面取出来使用,如果没有的话,在常量池里面缓存一份new的方式先在堆里面开辟,与此同时还会去常量池里面查看Stringstr=newString("AA......
  • java基于springboot大学生个人财务理财管理系统vue
    目录功能和技术介绍系统实现截图为什么选择最新的Vue与SpringBoot技术开发核心技术介绍:代码执行流程核心代码部分展示可行性分析其他springboot项目推荐详细视频演示源码获取功能和技术介绍本大学生个人财务管理系统设计目标是实现收入和支出的信息化管理,提高管理效......
  • Java中使用jcifs库操作SMB协议进行文件操作
    简介SMB是一种网络通信协议,用于计算机在网络上进行文件共享、打印服务以及其他资源的共享。jcifs是一个纯Java实现的SMB客户端库,它允许Java应用程序访问SMB共享资源。环境准备在开始之前,确保你的项目中已经添加了jcifs库的依赖。如果使用Maven,可以在pom.xml文件中添加以下依赖:......
  • Java 接口缓存(Redis + 注解)
      为了提升用户体验并优化那些因数据量庞大而导致响应缓慢的统计类接口,我们可以采用以下策略来实现接口数据的缓存机制:实现步骤:引入缓存机制:利用Redis作为缓存存储,因其速度快且支持高并发访问。前端请求处理:在前端请求到达后端之前,通过拦截器(Interceptor)进行处......
  • Java基本数据类型转换
    一、自动类型转换1.基本介绍当Java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换数据类型按精度(容量)大小进行排序为:![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/520b6288a88540b0ace9d2c22b844ca4.pngpublicclass......
  • java的数据类型
    java是一门强语言类型Java的数据类型分为两大类1.基本类型(primitivetype)强制转换类型会有内存溢出或者精度丢失问题,不能对boolean类型进行强制转换不能把对象类型转换位不相干的类型整数int类型拓张二进制0b八进制0十六进制0xfloat存在舍入误差问题,最好完全避免使......
  • Java基础知识——String篇
    一、String1、是什么String是Java中用于表示字符串的类。Java中的字符串是不可变的,也就是说一旦创建,字符串的内容无法更改。2、如何构造(1)无参数构造方法:Stringstr=newString();//创建一个空字符串。(2)从字符数组创建:char[]charArray={'H','e','l','l',......