什么是分布式锁?在回答这个问题之前,我们先回答一下什么是锁。

普通的锁,即在单机多线程环境下,当多个线程需要访问同一个变量或代码片段时,被访问的变量或代码片段叫做临界区域,我们需要控制线程一个一个的顺序执行,否则会出现并发问题。

如何控制呢?就是设置一个各个线程都能看的见的标志。然后,每个线程想访问临界区域时,都要先查看标志,如果标志没有被占用,则说明目前没有线程在访问临界区域。如果标志被占用了,则说明目前有线程正在访问临界区域,则当前线程需要等待。

这个标志,就是锁。

在单机多线程的java程序中,我们可以使用堆内存中的变量作为标志,因为多线程是共享堆内存的,堆内存中的变量对于各个线程都是可见的。

讲明白了普通的锁,接下来,我们再看看分布式锁。

在分布式环境下,即多台计算机,每个计算机上会启动jvm执行程序的运行环境下,如果不同计算机上的线程想访问临界区域时,该怎么办呢?

前面普通锁的使用堆内存中的变量的方式肯定不适用了。因为在多机环境下,某台计算机上的堆内存中的变量对于其他计算机上的线程肯定是不可见的。那么,根据锁的本质和原理,我们就要找到另外的对于多机上的线程都可见的标志,以它来作为锁,就可以了。这样的锁,就是分布式锁。

当然,这里只是解释了什么是分布式锁,至于分布式锁该如何实现,其实有多重方式,关键在于要保证锁对多机上的程序是可见的即可。一些常用的实现方式是,使用redis,使用数据库等等。

为什么要使用分布式锁

我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug!

注意这是单机应用,也就是所有的请求都会分配到当前服务器的JVM内部,然后映射为操作系统的线程进行处理!而这个共享变量只是在这个JVM内部的一块内存空间!

分布式锁应该具备哪些条件

在分析分布式锁的三种实现方式之前,先了解一下分布式锁应该具备哪些条件:

  • 1、在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行;

  • 2、高可用的获取锁与释放锁;

  • 3、高性能的获取锁与释放锁;

  • 4、具备可重入特性;

  • 5、具备锁失效机制,防止死锁;

  • 6、具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败。

分布式锁的三种实现方式

目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以接受的范围内即可。

在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。有的时候,我们需要保证一个方法在同一时间内只能被同一个线程执行。

  • 基于数据库实现分布式锁;

  • 基于缓存(Redis等)实现分布式锁;

  • 基于Zookeeper实现分布式锁;

结语

小编也是很有感触,如果一直都是在中小公司,没有接触过大型的互联网架构设计的话,只靠自己看书去提升可能一辈子都很难达到高级架构师的技术和认知高度。向厉害的人去学习是最有效减少时间摸索、精力浪费的方式。

我们选择的这个行业就一直要持续的学习,又很吃青春饭。

虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。

小编整理的学习资料分享一波!

送给每一位想学习Java小伙伴,用来提升自己。想要资料的可以点击这里免费获取

com/vip204888/java-p7)**
[外链图片转存中…(img-HEmXVRxj-1625760057494)]

本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!

不可多得的干货!BAT大厂Java面试真题锦集干货整理相关推荐

  1. 十多家大厂Android面试真题锦集干货整理,好文推荐

    我,来自大山. 我,不甘平凡. 笔者80后,出生在江西一个偏远的山村.虽然出生时已经不是那个温饱都是问题的年代,但是也谈不上有个幸福的童年.家里很穷.幼儿园并没有读,因为家里觉得花那个钱没有必要,小学 ...

  2. 十多家大厂Android面试真题锦集干货整理,成功拿下大厂offer

    前言 先简单交代一下背景吧,本人毕业于某不知名985的本硕,17年毕业加入阿里,今年下半年跳槽到了头条,一直从事后端研发相关的工作. 之前没有实习经历,算是两年半的工作经验吧.这两年半之间完成了一次晋 ...

  3. 安卓开发视频教程!十多家大厂Android面试真题锦集干货整理,写给正在求职的安卓开发

    前言 最近两部剧爆火,30而已,20不惑,其实刚刚开始看这个2个电视剧我在想是不是说反了.不是应该29而已,30不惑吗?后面想想其实他应该是想告诉我们这个残酷的现实吧!在这个时代我们20 岁就必须成熟 ...

  4. 安卓开发工程师面试题!十多家大厂Android面试真题锦集干货整理,好文推荐

    我,来自大山. 我,不甘平凡. 笔者80后,出生在江西一个偏远的山村.虽然出生时已经不是那个温饱都是问题的年代,但是也谈不上有个幸福的童年.家里很穷.幼儿园并没有读,因为家里觉得花那个钱没有必要,小学 ...

  5. 金三银四如何抱佛脚?2022 最新大厂 Java 面试真题合集(附权威答案)

    这些面试资料都是我通过各种渠道收集到的大厂面试真题,并附有最新的权威答案,绝不是网络上那些已经是几年前甚至十几年前的面试题所能媲美的,除面试题外还有我整理的一些经典 Java 学习电子书也都可以无偿分 ...

  6. 秋招如何抱佛脚?2022最新大厂Java面试真题合集(附权威答案)

    2022秋招眼看着就要来了,但是离谱的是,很多同学最近才想起来还有秋招这回事,所以纷纷临时抱佛脚,问我有没有什么快速磨枪的方法, 我的回答是:有! 说起来,临阵磨枪没有比背八股文更靠谱的了,很多人对这 ...

  7. 2021大厂Java面试真题(一)

    2021大厂Java面试真题(一) 大厂面试的基本流程 以下是一些大厂面试的基本流程,大家可以参考下: 字节跳动 阿里 腾讯 网易游戏 面试前需要准备: \1. **Java 八股文:**了解常考的题 ...

  8. 2021大厂Java面试真题(二)

    2021大厂Java面试真题(二) 2021 [阿里]面试真题: 1.TCP 和 UDP 区别? TCP 基于连接,UDP 基于无连接. TCP 要求系统资源较多,UDP 较少. UDP 程序结构较简 ...

  9. 2021大厂Java面试真题(六)

    2021大厂Java面试真题(六) * * 2021 [华为]面试真题* * : * * 1.Java 常用集合及特点?* * List:ArrayList.LinkedList.Vector.Sta ...

最新文章

  1. Web安全实践(14)嗅探,arp欺骗,会话劫持与重放攻击(下)
  2. 变态公式之如何算出圆的内部被切割成几块?
  3. 索引会自动更新吗_mysql的B+树中数据存放结构和索引常见问题你会吗?
  4. 【v8】一些关于内存泄漏的踏坑
  5. distcc 链接失败_distcc分布式编译时,icu host程序偶现编译失败原因分析
  6. 【以太坊源码】I.区块和交易,合约和虚拟机
  7. request转发,response重定向,异步请求json数据输出到页面
  8. qml 定义函数_QML类型系统
  9. jquery ready() 与window onload的区别
  10. 后缀mcp用什么软件打开_如何打开MCP文件?
  11. 左右极限相等的matlab,如何求左右极限
  12. 如何使用Nginx Ingress实现灰度发布和蓝绿发布?
  13. autoCAD2010裁剪工具使用
  14. 小白通过JDBC在AndroidStudio一步步来访问MYSQL数据库
  15. React + TS项目开发小技巧总结
  16. PT2262/2272遥控编解码集成电路
  17. 【时间序列】python与时间序列基本教程4(超过1.9万字 代码超过900行 包括49个图)...
  18. [转]告诉你真实的监狱生活
  19. Word中清除拼音信息
  20. spring.factories的理解

热门文章

  1. 金属激光切割机行业调研报告 - 市场现状分析与发展前景预测
  2. 2021-2025年中国乘用车稳定杆行业市场供需与战略研究报告
  3. 小米手机不弹出usb连接设置_安卓手机数据备份教程(华为、小米、oppo、vivo)...
  4. [教程]在Windows 2012 R2上安装Intel I217-V/I218-V网卡驱动
  5. “内”忧“外”患,3 万台 Mac 有危险!
  6. 国内首个 App SDK 国家标准成功立项;苹果意外泄露iPhone 12发布时间;TypeScript 4.0 发布| 极客头条
  7. 顺丰正式杀入外卖领域;中国移动推出 5G 消息 App;GCC 10.1 发布 | 极客头条
  8. 你值得拥有的 11 个前端开发利器
  9. 趣谈 JOIN 操作
  10. 针对金融级交易场景的严苛技术要求,如何修炼这门“必修课”?