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

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

在分布式环境下,即多台计算机,每个计算机上会启动jvm执行程序的运行环境下,如果不同计算机上的线程想访问临界区域时,普通锁的使用堆内存中的变量的方式肯定不适用了。

根据锁的本质和原理,我们就要找到另外的对于多机上的线程都可见的标志,以它来作为锁,就可以了。这样的锁,就是分布式锁。

分布式锁都应具备一下这些条件:

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

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

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

4、具备可重入特性;

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

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

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

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

免费领取Java面试题

Java分布式锁的概念以及使用优点相关推荐

  1. java分布式锁解决方案 redisson or ZooKeeper

    redis 分布式锁 Redisson 是 redis 官方推荐的Java分布式锁第三方框架. 高效分布式锁 当我们在设计分布式锁的时候,我们应该考虑分布式锁至少要满足的一些条件,同时考虑如何高效的设 ...

  2. Java分布式锁看这篇就够了,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  3. Java分布式锁那点事

    分布式锁那点事 为什么要使用分布式锁 为了保证一个方法在高并发情况下的同一时间只能被同一个线程执行,在传统单体应用单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLcok或 ...

  4. 乐观锁、悲观锁、分布式锁的概念及实现

    基本概念 一.乐观锁 总是认为不会产生并发问题,每次去取数据的时候总认为不会有其他线程对数据进行修改,因此不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS ...

  5. java分布式锁终极解决方案之 redisson

    目前有很多项目还在使用redis的 setNx 充当分布式锁,然而这个锁是有问题的,redisson是java支持redis的redlock的唯一实现,.目前支持集群模式,云托管模式,单Redis节点 ...

  6. 搞懂Java分布式锁实现看这篇文章就对了

    2019独角兽企业重金招聘Python工程师标准>>> 前言: 随着微处理机技术的发展,人们只需花几百美元就能买到一个CPU芯片,这个芯片每秒钟执行的指令比80年代最大的大型机的处理 ...

  7. Redis分布式锁的概念

    作者:bravo1988 链接:https://www.zhihu.com/question/317687988/answer/1715863550 来源:知乎 著作权归作者所有.商业转载请联系作者获 ...

  8. java锁的概念,Java ReentrantLock锁机制概念篇

    分享Java锁机制实现原理,细节涉及volatile修饰符.CAS原子操作.park阻塞线程与unpark唤醒.双向链表.锁的公平性与非公平性.独占锁和共享锁.线程等待await.线程中断interr ...

  9. 【Java分布式锁都有哪几种实现方式】

    在分布式系统中,为了保证共享资源的互斥性,需要使用分布式锁.在Java中,实现分布式锁的方式有以下几种: 基于数据库实现分布式锁(唯一索引.悲观锁) 可以使用数据库中的唯一索引或者悲观锁来实现分布式锁 ...

最新文章

  1. 剑指offer:面试题21. 调整数组顺序使奇数位于偶数前面
  2. 企业安全建设之搭建开源SIEM平台(上)
  3. 毕业课题之------------图像的形态学滤波
  4. 【加权并查集】bzoj 4602 齿轮
  5. POJ-2777-CountColor(线段树,位运算)
  6. 混合字符串字符数统计
  7. 找不到天隆虚拟机_玩转虚拟机,教你如何装系统
  8. Failed to load or instantiate TagLibraryValidator class: org.apache.taglibs.standard.tlv.JstlFmtTLV
  9. linux 同步北京时间_linux 同步北京时间
  10. 中职计算机基础课教学策略研究,中职计算机基础知识教学方法及教学策略研究.doc...
  11. c# word 增加段落_你知道制作简历时的9个Word技巧吗?
  12. 声卡测试音频100Hz~1KHz
  13. 详细安装 kali 教程 和 基本命令使用
  14. 基于java软件工程专业教辅平台课程子系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  15. 抖音几个赞才能上热门 视频去水印
  16. 记一次失败的项目经历
  17. Visual studio 2017 安装
  18. java实现低碳生活大奖赛
  19. 网站内容采集工具介绍
  20. 光影学习 - 三点光照

热门文章

  1. vue | 基于vue的城市选择器和搜索城市对应的小区
  2. php解析、封装JSON与XML
  3. ORA-00119: invalid specification for system parameter LOCAL_LISTENER;
  4. cocos2dx的runAction: 反复运行,多个动作连接运行,多个动作同一时候运行的实现
  5. 关于ASP.NET给产品分类,分页,详情页生成静态页面
  6. MSSQL从2000升级到2005丢失数据库关系图的解决方案
  7. php curl iis,解决IIS运行PHP出现Call to undefined function curl_init()的问题
  8. mysql增删改查大全_MySQL数据库增删改查SQL语句(2018整理集合大全)
  9. python有什么证可以考1002python有什么证可以考_离python二级考还有十几天,吓的我赶紧买了本python教程...
  10. windows启动管理器怎么修复计算机,如果启动管理器丢失怎么办