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

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

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

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

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

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

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

到底什么是分布式锁,进程锁,线程锁相关推荐

  1. 嵌入式 linux 进程锁,嵌入式  Linux线程锁详解pthread_mutexattr_t

    在Posix Thread中定义有一套专门用于线程同步的mutex函数. 1. 创建和销毁 有两种方法创建互斥锁,静态方式和动态方式.POSIX定义了一个宏PTHREAD_MUTEX_INITIALI ...

  2. python 线程锁_Python多线程-线程锁

    多线程修改一份数据时需要用到线程锁,以防止数据修改出错 #-*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import threa ...

  3. 线程锁与避免线程锁 线程锁检测

    进程是资源共享的,线程是资源私有的. 死锁的四个必要条件 在计算机专业的本科教材中,通常都会介绍死锁的四个必要条件.这四个条件缺一不可,或者说只要破坏了其中任何一个条件,死锁就不可能发生.我们来复习一 ...

  4. 一句话说清分布式锁,进程锁,线程锁

    一句话说清分布式锁,进程锁,线程锁 在分布式集群系统的开发中,线程锁往往并不能支持全部场景的使用,必须引入新的技术方案分布式锁. 线程锁,进程锁,分布式锁 线程锁:大家都不陌生,主要用来给方法.代码块 ...

  5. 深入浅出 超详细 从 线程锁 到 redis 实现分布式锁(篇节 1)

    在 使用 redis 实现分布式锁 之前 我们需要先了解以下几点 什么是分布式锁 要介绍 什么是分布式锁,那首先要提到 与之对应的 的两个锁:线程锁 和 进程锁 1.线程锁 主要 用来 给方法.代码块 ...

  6. 线程锁/进程锁/文件锁

    > 线程锁/进程锁/文件锁  1.线程锁是锁线程的,锁住禁用,如果4线程的CPU锁一个线程剩余三个(如果可以锁的话),就像四车道封锁一条车道还剩3个车道可以跑车:  2.进程锁是锁进程的,进程就 ...

  7. python多线程,线程锁

    python使用多线程, 不一定运行速度快,这里引入GIL(global interpreter lock) python解释器中任意时刻都只有一个线程在执行; GIL执行过程: 1). 设置一个GI ...

  8. python多线程之线程锁(Lock)和递归锁(RLock)实例

    一.线程锁 Threading模块为我们提供了一个类,Threading.Lock锁.我们创建一个该类对象,在线程函数执行前,"抢占"该锁,执行完成后,"释放" ...

  9. GIL锁,线程锁(互斥锁)和递归锁

    GIL锁(Global Interpreter Lock):CPython才会有(是这种解释器的历史遗留问题),Python程序执行前,先获得GIL锁,然后每执行100个指令,解释器就自动释放GIL锁 ...

  10. 多线程并发安全问题与线程锁

    一.多线程并发安全问题 二.什么是线程锁及分类 三.synchronized关键字 多线程并发安全问题 当多个线程并发操作同一临界资源,由于线程切换时机不确定,导致操作临界资源的顺序出现混乱严重时可能 ...

最新文章

  1. cmd 修改文件属性
  2. c++ vector查找_C++ vector内存分配策略浅析
  3. html提供的常用的页面交换元素有哪些,一些常用网页制作代码收集汇总
  4. python外星人入侵游戏代码_Python游戏:外星人入侵游戏编程完整版!内附代码
  5. 计算机硬件结构中负责识别,计算机硬件基本结构树状图
  6. 使用nmcli 实现 bond0 网络组 网桥三种模式
  7. 【DP】Mod Mod Mod(CF889E)
  8. python练习题-day25
  9. Qt、GTK 和KDE、GNOME的关系-转
  10. 完美解决 WinRAR V5.XX的广告弹窗
  11. matlab怎么对语音信号处理,语音信号处理MATLAB程序
  12. 深度学习中 GPU 和显存分析
  13. 计算机网络(五) | 数据链路层:MAC地址、以太网协议、MTU和ARP协议
  14. 信念就是一种观念对不对_信念与观念一字之差天差地别
  15. 华为云免费试用_如何试用华为云服务器
  16. 游戏界面设计艺术性的思考
  17. Linux服务器如何开启某个端口?
  18. mysql中如何分页查询_MySQL_mysql分页原理和高效率的mysql分页查询语句,以前我在mysql中分页都是用的 l - phpStudy...
  19. 分享 tsc 条码打印机 打印控件 调用方法 , c# silverlight
  20. matlab 雷诺,matlab求解雷诺方程

热门文章

  1. PHP到底有多糟糕?
  2. subprocess.CalledProcessError: Command ‘[‘/home/***/anaconda3/envs/***/bin/python‘, ‘-u‘, ‘pretra
  3. SecureCRT 下载,安装,绝佳配色,实用配置,上传下载配置合集
  4. JSS (css in js) emotion库的使用
  5. Xms Xmx PermSize MaxPermSize的区别
  6. 苹果原壁纸高清_第111期壁纸分享。
  7. ECharts系列 - 地图 实例一
  8. 计算机在现代设计技术中应用,现代设计过程中应用计算机艺术的研究
  9. 更新微软Edge后,发现NewBing边栏快捷插件没有了,新bing侧边栏,侧边栏快捷键
  10. win10桌面显示计算机及网上邻居,win10看不见其他网上邻居的两种解决方法[多图]...