Java并发编程—自旋锁CLHLock原理
原文作者:知识铺
原文地址:Java知识进阶-程序员必懂的自旋锁CLHLock原理
目录
一、CLHLock
1、原理
2、获取锁步骤:
二、MCSLock
1、原理
2、步骤
一、CLHLock
1、原理
内部实现的是一种基于原子操作的链表,特点:可扩展、高性能、公平的自旋锁。线程是在自身本地变量上自旋,不断轮询它的链表前一个节点状态。解决问题:避免多个线程一起来,一起竞争的不公平性问题,提供了一种先来先服务的公平性;如 银行的取号机。简单源码演示:
2、获取锁步骤:
第一个线程: 第一次来获取锁,立刻获取到锁
第二个线程: 线程一还没有处理完,就要加入到队列,并关心它的前驱节点锁状态,然后进行自旋。thread2 获取到的前驱节点是thread1,它锁是true状态,只能进入while循环。后续线程以此类推,添加到队里中。
第三步: 释放锁, thread1 把自身的locked = false ,同时把当前节点改为了前节点。
二、MCSLock
1、原理
- 原理:与CLHLock原理差不多,(CLHLock参阅前一章知识点)
- 区别:链表结构不同 , 自旋自身节点
- 解决问题:同样公平性问题,先到先服务问题
简单源码演示:
2、步骤
注意点1: 第一个线程,第一次进来就进入了获取锁
注意点2: 第二个线程进入,线程1还没有结束,自身先自旋等待
注意点3: 解锁 , 检测到后续有节点,就把后续节点 locked=false,相当于把锁释放给了后续节点。
Java并发编程—自旋锁CLHLock原理相关推荐
- Java并发编程-无锁CAS与Unsafe类及其并发包Atomic
[版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/72772470 出自[zejian ...
- Java并发编程之锁机制之LockSupport工具
关于文章涉及到的jdk源码,这里把最新的jdk源码分享给大家----->jdk源码 前言 在上篇文章<Java并发编程之锁机制之AQS(AbstractQueuedSynchronizer ...
- Java 并发编程—有锁互斥机制及AQS理论
原文作者:Java并发编程 原文地址:AQS这样学就很简单了 目录 一.有锁互斥机制 二.AQS如何实现互斥 三.结语 如果你是道格李,你要实现一套机制来保证线程互斥,你会如何实现呢?你肯定不会一上来 ...
- Java并发编程—定时器Timer底层原理
原文作者:妮蔻 原文地址:Java并发编程笔记之Timer源码分析 目录 一.timer问题复现 二.Timer 实现原理分析 timer在JDK里面,是很早的一个API了.具有延时的,并具有周期性的 ...
- java并发锁有哪些,Java并发编程-公平锁与非公平锁
写这个文章的时候让我想起了让子弹飞的一个台词 公平,公平,还是tmd公平! 什么是公平和非公平 首先,我们来看下什么是公平锁和非公平锁. 公平锁指的是按照线程请求的顺序,来分配锁: 非公平锁指的是不完 ...
- Java并发编程 Synchronized及其实现原理
Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法.Synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见 ...
- 【java】java 并发编程 StampedLock 锁 【不重要】
文章目录 1.概述 2.synchronized 3.读写锁 3.1 读写锁缺点 4.StampedLock 4.1 缺点 5.案例 5.1 案例1 5.1 案例2 6.性能对比 7.总结 1.概述 ...
- Java并发编程-synchronized锁优化
目录 1.小故事 2.轻量级锁 3.锁膨胀 4.自旋优化 5.偏向锁 5.1.概述 5.2.偏向锁状态 5.3.偏向锁撤销 5.3.1.调用对象hashCode 5.3.2.其它线程使用对象 5.3. ...
- Java并发 - 初识自旋锁
自旋锁 首先我们需要理解:阻塞还有唤起线程都需要操作系统切换CPU状态去完成,这种状态转换需要耗费处理器时间,如果同步代码块中的任务十分简单,可能切换状态的时间要大于我们处理同步资源的时间了. 在许多 ...
最新文章
- 浅显易懂 Makefile 入门 (01)— 什么是Makefile、为什么要用Makefile、Makefile规则、Makefile流程如何实现增量编译
- 一款小巧好用的MAC地址扫描器
- 服务机器人---多传感器融合
- 模拟课----需求文本
- php大马免杀技巧 | bypass waf
- log4j mysql_log4j写入mysql数据库 | 学步园
- 杰里之混响音效调试【篇】
- 微信公众号定位显示EC-01G模组+STM32F103
- 今天又是一个全新的开始...
- PMP备考大全:经典题库(5月)
- 【打卡-Coggle竞赛学习2023年2月】图节点嵌入
- Dilated conv扩张卷积的理解(一看就会)
- 国内知名插画培训机构有哪些
- Python数据分析辅助审计工作
- LINUX NGINX 环境禁止访问指定后缀文件
- 混迹职场N年后,人过中年,如何不被社会所淘汰?
- 基于ESP8266与Blinker(点灯科技平台)的智能遥控器设计
- Google Play Store 应用无法安装解决方案
- android内存泄漏检测工具,Android内存泄漏的检测工具——LeakCanary
- 服务器存储hba卡直连,hba卡直连存储_fc hba卡之间如何连接_hba卡怎么连存储(5)