扫地阿姨看完都学会了!java高级架构师考试

努力编程进阶中 努力编程进阶中     2022-12-04     682

关键词:

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

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

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

这个标志,就是锁。

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

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

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

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

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

为什么要使用分布式锁

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

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

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

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

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

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

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

  • 4、具备可重入特性;

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

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

分布式锁的三种实现方式

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

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

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

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

  • 基于Zookeeper实现分布式锁;

1200页Java架构面试专题及答案

小编整理不易,对这份1200页Java架构面试专题及答案感兴趣劳烦帮忙转发/点赞一下,然后点击这里即可免费领取!

百度、字节、美团等大厂常见面试题

[外链图片转存中…(img-WkBijHRn-1625840350284)]

百度、字节、美团等大厂常见面试题

35岁android开发,还能在程序员这条路上越走越远么?,扫地阿姨看完都学会了

说下Activity跟window,view之间的关系横竖屏切换的Activity生命周期变化如何启动其他应用的ActivityActivity的启动过程[]()FragmentFragment为什么会被称为第五大组件Fragment加载到Activity的2种方式Fragment与ViewPager的搭配使用Fragment的生命... 查看详情

农民工看完都学会了!java二维字符串数组初始化

学习内容大致内容:1、架构师筑基(Linux基础与进阶+Netty框架+Mysql+并发编程+JVM性能调优+Tomcat)2、开源框架(主要涉及SSM框架)3、高性能架构(Mysql高性能存储实战+Redis缓存数据库+Zoo... 查看详情

小白看完都学会了!java在线考试系统自动批改

分布式系统特性与衡量标准透明性:使用分布式系统的用户并不关心系统是怎么实现的,也不关心读到的数据来自哪个节点,对用户而言,分布式系统的最高境界是用户根本感知不到这是一个分布式系统可扩展性&... 查看详情

农民工看完都学会了!java中间件开发

初识多线程介绍进程回到线程进程与线程并行与并发Javs实现多线程Java实现多线程需要注意的细节Thread线程类API设置线程名守护线程优先级线程线程生命周期使用多线程需要注意的问题线程安全问题性能问题安全发布对象简述解... 查看详情

农民工看完都学会了!学java软件编程

人生转折点去年的时候,几个玩的好的老同学就聊了起来,其中有个考上了西安财大,读了新闻系,毕业后干了不久就想做了,原因很现实,既感觉不到前途,也感受不到任何钱途,索性就去报了... 查看详情

农民工看完都学会了!学java软件编程

人生转折点去年的时候,几个玩的好的老同学就聊了起来,其中有个考上了西安财大,读了新闻系,毕业后干了不久就想做了,原因很现实,既感觉不到前途,也感受不到任何钱途,索性就去报了... 查看详情

一个牛逼项目的上线过程,看完都是眼泪!

一个牛逼项目的上线过程,看完都是眼泪!2016-11-2919:27摘自:http://www.sohu.com/a/120218616_467819▽客户需求:造一条船,能过河就好▽产品经理:我们可以提供这样的方案▽首席架构师:按照需求规划蓝图▽高级研发经理:进行项目... 查看详情

农民工看完都学会了!java中间件开发

初识多线程介绍进程回到线程进程与线程并行与并发Javs实现多线程Java实现多线程需要注意的细节Thread线程类API设置线程名守护线程优先级线程线程生命周期使用多线程需要注意的问题线程安全问题性能问题安全发布对象简述解... 查看详情

html+css基础,小学生看完都学会了(代码片段)

html+css基础html的介绍html的基本结构vscode的基本使用初始常用的html标签资源路径列表标签表格标签表单标签表单提交css的介绍css的引入方式css选择器css属性css元素溢出css显示特性盒子模型html的介绍html的介绍学习目标能够知道h... 查看详情

程序员才懂的搞笑图!保准你笑出猪叫......

?HTML的4种黑法扫地阿姨:HTML确实是一门编程语言啊![]扫地阿姨:所以HTML程序员不能称自己是程序员?扫地阿姨:这个黑的太过分了吧!扫地阿姨:小姑娘我被你的外表欺骗的好惨?编程使我快乐扫地阿姨:这样效率一定很高吧扫... 查看详情

软考高级系统架构师是什么来头?考上了就能当架构师了吗

...这段你百度下也能找到,我放在这里省得你去查了。高级系统架构设计师考哪些内容我考的是高级别中的系统架构设计师这个科目,这个科目应该是高级所有科目里最偏技术的,因为我本身做开发和架构相关的,... 查看详情

农民工看完都学会了!学java软件编程

人生转折点去年的时候,几个玩的好的老同学就聊了起来,其中有个考上了西安财大,读了新闻系,毕业后干了不久就想做了,原因很现实,既感觉不到前途,也感受不到任何钱途,索性就去报了... 查看详情

p8架构师倾情讲述,看源码是java高级程序员内功修炼必经之路

...的技术内容大致相似,但是,那些技术不是说你想学就能学会的,如果你只是写了几年的业务代码,不对源码加以分析,那么你永远只是停留在码农阶段。你必须要学 查看详情

点燃java高级架构师的成长之路!

作者:java高级进阶链接:https://www.nowcoder.com/discuss/72575来源:牛客网金三银四跳槽旺季,每个人都想有一份高薪资,环境好,且稳定的工作,现在已经是四月份了,跳槽旺季还剩最后一个月,你们都准备好了么?你们吃饭的技术... 查看详情

你不会还不知道最新版java高级架构师面试技术标准手册吧??还不来学习提升自己,内卷不卷你卷谁??

...、做了什么,担任了什么角色?3.从这个项目中你学会了那些东西,使用到了那些技术,学会了那些新技术的使用4.另外 查看详情

系统架构设计师-软件水平考试(高级)-理论-架构风格

系统架构设计师-架构风格前言:看来非技术向的架构XMIND真的真的受欢迎啊。上一篇非技术类的阅读量明显高出平均水准好多。。。但是,这次真的是系统架构师这个考试最有价值的技术类XMIND了。如果感觉图片模糊,请将图片... 查看详情

系统架构师之java虚拟机osgi—jvm高级性能架构项目实战开发

系统架构师之Java虚拟机、OSGi—JVM高级性能架构项目实战开发分享网盘地址:https://pan.baidu.com/s/1bproUYj密码:q6i3本课程由浅入深,全面、系统地介绍了JAVA虚拟机基础、应用、管理、性能优化、数据库的架构,环境搭建实例,编程... 查看详情

农民工看完都会了!java线程池面试问题(代码片段)

正文模块(Module)、组件(Component)、包(Package),这些概念对于我们技术同学并不陌生,但并不是所有人都能理解其要义。深入理解之后,我才发现,其背后的深意是分类思维。而这种分... 查看详情