原创转载请注明出处:https://agilestyle.iteye.com/blog/2443641
分段锁
分段锁其实是一种锁的设计,并不是具体的一种锁,对于ConcurrentHashMap而言,其并发的实现就是通过分段锁的形式来实现高效的并发操作。
并发容器类的加锁机制是基于粒度更小的分段锁,分段锁也是提升多并发程序性能的重要手段之一。
在并发程序中,串行操作是会降低可伸缩性,并且上下文切换也会减低性能。在锁上发生竞争时将通水导致这两种问题,使用独占锁时保护受限资源的时候,基本上是采用串行方式—-每次只能有一个线程能访问它。所以对于可伸缩性来说最大的威胁就是独占锁。
一般有三种方式降低锁的竞争程度:
1、减少锁的持有时间
2、降低锁的请求频率
3、使用带有协调机制的独占锁,这些机制允许更高的并发性。
在某些情况下可以将锁分解技术进一步扩展为一组独立对象上的锁进行分解,这成为分段锁。
其实说的简单一点就是:
容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是ConcurrentHashMap所使用的锁分段技术,首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。
比如:在ConcurrentHashMap中使用了一个包含16个锁的数组,每个锁保护所有散列桶的1/16,其中第N个散列桶由第(N mod 16)个锁来保护。假设使用合理的散列算法使关键字能够均匀的分部,那么这大约能使对锁的请求减少到越来的1/16。也正是这项技术使得ConcurrentHashMap支持多达16个并发的写入线程。
相关推荐
003 redis分布式锁 jedis分布式锁 Redisson分布式锁 分段锁
各种锁汇总,乐观锁、悲观锁、分布式锁、可重入锁、互斥锁、读写锁、分段锁、类锁、行级锁等
NULL 博文链接:https://107192468a.iteye.com/blog/2296911
俄罗斯数据库地深度1分段锁肯定是个
主要介绍了java并发分段锁实践代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了golang 并发安全Map以及分段锁的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了java ConcurrentHashMap锁分段技术详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
锁汇总 个人介绍 计算机专业出身,研究僧,阿里架构师。写过专利,竞赛拿过奖,CSDN博客专家。负责过电商交易、社区团购、营销、金融等业务。多年团队管理经验,爱思考,热衷把工作沉淀写成文章 近期整理多个技术...
本文将结合Java内存模型,分析JDK源代码,探索ConcurrentHashMap高并发的具体实现机制,包括其在JDK中的定义和结构、并发存取、重哈希和跨段操作,并着重剖析了ConcurrentHashMap读操作不需要加锁和分段锁机制的内在...
ConcurrentHashMap使用了分段锁(Segment)来实现并发的读写操作,每个Segment都相当于一个小的HashMap,将整个哈希表分成多个部分。这样可以同时进行多个线程的并发读写操作,不会阻塞其他线程的访问。 需要注意的...
• 熟悉Java多线程并发中线程基本方法,线程池,线程生命周期,熟悉Java锁中常见锁分类(乐观/悲观锁、自旋锁、独/共享锁、可重入锁、公平/非公平锁、分段锁、偏向锁,轻/重量级锁)和基本的锁升级策略
JAVA8 的 ConcurrentHashMap 为什么放弃了分段锁,有什么问题吗,如果你来设计,你如何设计。 有没有有顺序的 Map 实现类,如果有,他们是怎么保证有序的。 抽象类和接口的区别,类可以继承多个类么,接口可以继承多...
ConcurrentHashMap是一种线程安全的哈希表数据结构,它是通过分段锁(Segment)实现的。它将哈希表分成多个段(Segment),每个段维护自己的一部分键值对,不同的段可以同时被多个线程访问,从而提高了并发性能。 ...
时间片是CPU分配给各个线程的时间,因为时间非常短,所以CPU不断通过切换线程,让我们觉得是...可以参照jdk1.7分段锁的思想,不同的线程处理不同的数据,这样在多线程竞争的条件下,可以减少上下文切换的时间 CAS算法
进路锁闭 当与进路相关的道岔位置符合进路需求、进路在空闲状态、以及没有建立敌对进路等条件满足时,实现进路锁闭,此时,进路中各个轨道电路区段就处于进设计方案实验3计算机联锁软件设计方案全文共16页,当前为...
进路锁闭 当与进路相关的道岔位置符合进路需求、进路在空闲状态、以与没有建立敌对进路等条件满足时,实现进路锁闭,此时,进路中各个轨道电路区段就处于进路锁闭状态了.于是对轨道区段内的道岔实行了进路锁闭,使其不...
文章提出了基于以太坊区块链技术的数字资产发行及管理方法,设计实现了以太坊钱包为核心的关键技术,并基于ERC20实现了数字资产发行及资产管理的智能合约,通过上层应用调用智能合约实现了数字资产转账、分段锁仓及销毁...
主要介绍了Redis上实现分布式锁以提高性能的方案研究,其中重点需要理解异步算法与锁的自动释放,需要的朋友可以参考下
1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM .........................
1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ........................