当前位置: 首页 > news >正文

到底什么是分布式锁,进程锁,线程锁

在分布式集群系统的开发中,线程锁往往并不能支持全部场景的使用,必须引入新的技术方案分布式锁。

线程锁
  主要用来给方法、代码块加锁。当某个方法或者代码块使用锁时,那么在同一时刻至多仅有有一个线程在执行该段代码。当有多个线程访问同一对象的加锁方法/代码块时,同一时间只有一个线程在执行,其余线程必须要等待当前线程执行完之后才能执行该代码段。但是,其余线程是可以访问该对象中的非加锁代码块的。

进程锁
  也是为了控制同一操作系统中多个进程访问一个共享资源,只是因为程序的独立性,各个进程是无法控制其他进程对资源的访问的,但是可以使用本地系统的信号量控制(操作系统基本知识)。

分布式锁
  当多个进程不在同一个系统之中时,使用分布式锁控制多个进程对资源的访问。

分布式锁到底是什么,怎么实现?

实现分布式锁必须要依靠第三方存储介质来存储锁的元数据等信息。比如分布式集群要操作某一行数据时,这个数据的流水号是唯一的,那么我们就把这个流水号作为一把锁的id,当某进程要操作该数据时,先去第三方存储介质中看该锁id是否存在,如果不存在,则将该锁id写入,然后执对该数据的操作;当其他进程要访问这个数据时,会先到第三方存储介质中查看有没有这个数据的锁id,有的话就认为这行数据目前已经有其他进程在使用了,就会不断地轮询第三方存储介质看其他进程是否释放掉该锁;当进程操作完该数据后,该进程就到第三方存储介质中把该锁id删除掉,这样其他轮询的进程就能得到对该锁的控制。

线程锁,进程锁,分布式锁的作用都是一样的,只是作用的范围大小不同。范围大小:分布式锁 > 进程锁 > 线程锁。能用线程锁,进程锁情况下使用分布式锁也是可以的,能用线程锁的情况下使用进程锁也是可以的。只是范围越大技术复杂度就越大。
  
如果大家对java架构相关感兴趣,可以关注下面公众号,会持续更新java基础面试题, netty, spring boot,spring cloud等系列文章,一系列干货随时送达, 超神之路从此展开, BTAJ不再是梦想!

架构殿堂

相关文章:

  • 晶振參数校定
  • 这样做能让nginx新能提升10倍
  • 查看项目错误信息
  • 简单说明String类为什么是final的
  • RocketMQ启动broker提示 错误:找不到或无法加载主类
  • CSS盒子模型
  • 总结HashMap和TreeMap的区别
  • Spring AOP中pointcut expression表达式解析 及匹配多个条件
  • typora+picgo+gitee,轻松搞定图片上传
  • 转载-C#事件的使用和讲解
  • 详细描述Error和Exception(运行期和编译期)的区别
  • 线程的生命周期以及状态
  • ArcGIS AddIn调用ArcMap自带的对话框
  • 总结Synchronized与Lock的区别
  • 带你了解 java 各种锁
  • 分享的文章《人生如棋》
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 2017前端实习生面试总结
  • Asm.js的简单介绍
  • GitUp, 你不可错过的秀外慧中的git工具
  • HTTP那些事
  • HTTP中的ETag在移动客户端的应用
  • interface和setter,getter
  • javascript 总结(常用工具类的封装)
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Node + FFmpeg 实现Canvas动画导出视频
  • Protobuf3语言指南
  • 第十八天-企业应用架构模式-基本模式
  • 服务器之间,相同帐号,实现免密钥登录
  • 构造函数(constructor)与原型链(prototype)关系
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 基于游标的分页接口实现
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 思维导图—你不知道的JavaScript中卷
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • hi-nginx-1.3.4编译安装
  • 选择阿里云数据库HBase版十大理由
  • 组复制官方翻译九、Group Replication Technical Details
  • # C++之functional库用法整理
  • #Linux(帮助手册)
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (六)Hibernate的二级缓存
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • ../depcomp: line 571: exec: g++: not found
  • .cn根服务器被攻击之后
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NetCore部署微服务(二)
  • .Net语言中的StringBuilder:入门到精通
  • .net知识和学习方法系列(二十一)CLR-枚举