`

分段锁

    博客分类:
  • Lock
 
阅读更多

原创转载请注明出处: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分布式锁 分段锁

    本篇文章将详细探讨Redis作为分布式锁的实现方式,包括Jedis和Redisson两个主流的客户端库的使用,以及分段锁的概念和应用场景。 首先,Redis是一种内存数据存储系统,它支持丰富的数据结构如字符串、哈希、列表、...

    各种锁汇总,乐观锁、悲观锁、分布式锁、可重入锁、互斥锁、读写锁、分段锁、类锁、行级锁等

    本文将深入探讨标题和描述中提及的各种锁,包括乐观锁、悲观锁、分布式锁、可重入锁、互斥锁、读写锁、分段锁、类锁以及行级锁。 1. **乐观锁**:乐观锁假设多线程环境中的冲突较少,所以在读取数据时不加锁,只有...

    java并发分段锁实践代码

    "Java并发分段锁实践代码详解" Java并发分段锁实践代码是Java并发编程中的一种高级技术,主要用于解决并发访问共享资源时的同步问题。本文将通过示例代码介绍Java并发分段锁实践代码的实现细节,并对其进行详细分析...

    基于Java实现的高效分布式数据读模型与分段锁设计源码

    本项目是采用Java语言开发的分布式数据读模型及分段锁设计源码,包含109个文件,涵盖71个XML配置文件、14个Java类文件、12个Java源文件、4个列表文件、3个属性文件、1个Markdown文件、1个IDE项目文件以及1个JAR包...

    golang 并发安全Map以及分段锁的实现方法

    ### Golang并发安全Map及分段锁实现方法详解 #### 概述 在Go语言中,标准库提供的`map`类型并非线程安全的。因此,在多线程或并发环境中直接使用`map`可能导致数据竞争和不一致的问题。为了解决这个问题,开发者...

    java ConcurrentHashMap锁分段技术及原理详解

    Java中的`ConcurrentHashMap`是线程安全的散列表,为多线程环境设计,它引入了一种称为“锁分段技术”的并发控制策略。在理解这个技术之前,我们需要回顾一下传统的线程不安全和低效的散列表,如`HashMap`和`...

    Java并发篇乐观锁,悲观锁,自旋锁

    - **减小锁粒度**:如ConcurrentHashMap的分段锁,提高并行度。 - **锁分离**:如ReadWriteLock,读写操作分别用不同的锁,提高并发性。 - **锁粗化**:避免对同一锁的频繁请求和释放,将多个连续的同步块合并。 ...

    java版电商源码-Lock-Learning:各种锁汇总,乐观锁、悲观锁、分布式锁、可重入锁、互斥锁、读写锁、分段锁、类锁、行级锁等

    锁汇总 个人介绍 计算机专业出身,研究僧,阿里架构师。写过专利,竞赛拿过奖,CSDN博客专家。负责过电商交易、社区团购、营销、金融等业务。多年团队管理经验,爱思考,热衷把工作沉淀写成文章 近期整理多个技术...

    Java中的锁分类与使用.docx

    - 分段锁是一种优化策略,主要用于HashMap和ConcurrentHashMap中,将大锁分割成多个小锁,从而减少锁竞争,提高并发性能。 7. **偏向锁/轻量级锁/重量级锁** - **偏向锁**假定一个线程连续获取锁,就不再进行加锁...

    Java中的ConcurrentHashMap:线程安全的哈希表实现与代码示例

    通过本文,我们深入探讨了 ConcurrentHashMap 的内部实现原理,包括分段锁、CAS操作和红黑树等技术。此外,我们还通过代码示例展示了 ConcurrentHashMap 的基本使用方法和在并发环境下的优势。最后,我们对比了 ...

    Redis高并发分布式锁-1031.docx

    在分布式系统中,为了保证数据的一致性和安全性,常常需要使用到分布式锁。...但同时,我们也需要根据具体的应用需求和场景选择合适的分布式锁策略,如Zookeeper、Redlock或者分段锁,以达到最佳的系统性能和稳定性。

    Java 中15种锁的介绍

    7. **分段锁** 当大量线程并发访问大型数据结构(如哈希表)时,将锁细粒度化,只锁定部分数据,提高并发性能。如`ConcurrentHashMap`的实现。 8. **偏向锁 / 轻量级锁 / 重量级锁** - **偏向锁** 假设锁会被同一...

    Java锁的知识总结及实例代码共7页.pdf.zip

    例如,ConcurrentHashMap利用了分段锁实现高并发性能。 6. **线程安全的数据结构**:如ArrayList不是线程安全的,而Vector和CopyOnWriteArrayList是线程安全的。了解这些数据结构的线程安全性以及它们的适用场景至...

    常见的面试点1

    面试中,你可能会被问到如何在并发环境中安全地使用HashMap,这时可以提到`HashTable`(全局同步,性能较低)和`ConcurrentHashMap`(分段锁,性能更高)。 【ConcurrentHashMap详解】 ConcurrentHashMap是线程...

    Brian Goetz - 构造一个更好的hashmap

    1. 分段锁(Segmentation):ConcurrentHashMap使用了一种分段锁的策略,将哈希表内的数据分成不同的段,每个段都有自己独立的锁。这极大地减少了锁的数量,从而降低了锁竞争和提高了并发性。当对数据进行操作时,只...

    JUC最详细思维导图,一次了解读写锁,可重入锁,Cas原理,volatile 关键字原理

    它采用分段锁机制,每个分段独立,降低了锁竞争,提高了并发性能。`ConcurrentLinkedQueue`是一个无界线程安全队列,适合多生产者多消费者场景。`CopyOnWriteArrayList`是线程安全的动态数组,适用于读多写少的情况...

    几种JAVA细粒度锁的实现方式

    本文将详细探讨两种Java细粒度锁的实现方式:分段锁和哈希锁。 1. **分段锁** 分段锁的设计灵感来源于`ConcurrentHashMap`,它将锁的范围分割成多个段,每个段拥有一个独立的锁。当需要锁定某个对象时,根据对象的...

    锁优化技术分享.pdf

    将大锁拆分为小锁,例如ConcurrentHashMap的分段锁设计,允许在不同段上并行执行操作,从而提高并发性能。 4. **锁分离** 根据读写操作特性,使用读锁和写锁,读锁允许多个读取,写锁是独占的。...

Global site tag (gtag.js) - Google Analytics