`

ConcurrentHashMap 分段锁消失之谜-get

 
阅读更多

先上一段代码

//全程无分段锁
public V get(Object key) {
        Node<K,V>[] tab; Node<K,V> e, p; int n, eh; K ek;
        int h = spread(key.hashCode());
        if ((tab = table) != null && (n = tab.length) > 0 &&
//tabAt() 里面调用了U.getObjectVolatile(tab, ((long)i << ASHIFT) + //ABASE); 亲们可能都知道数据在内存存储都是有位置的,这位置就是内存地址
//volatile 做java的应该都知道,他可以保证数据的可见性,一般来说锁是保证了
//可见性和顺序性。
            (e = tabAt(tab, (n - 1) & h)) != null) {
            if ((eh = e.hash) == h) {
                if ((ek = e.key) == key || (ek != null && key.equals(ek)))
                    return e.val;
            }
            else if (eh < 0)
                return (p = e.find(h, key)) != null ? p.val : null;
            while ((e = e.next) != null) {
                if (e.hash == h &&
                    ((ek = e.key) == key || (ek != null && key.equals(ek))))
                    return e.val;
            }
        }
        return null;
    }

 看完了put和get果然没有分段锁了,那么它是怎么保证线程安全的呢,其实前文章已经有了答案--Unsafe.class 。运用了硬件的CAS机制保障。果然如网上所说,硬件技术推动了软件技术发展。至于什么叫硬件级的CAS源语,且听下回分解

分享到:
评论

相关推荐

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

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

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

    7. **分段锁**:当数据结构很大时,如ConcurrentHashMap,采用分段锁策略,将大锁分解为多个小锁,从而提高并发性。每个小锁只保护一部分数据,减少了锁竞争。 8. **类锁**:类锁是Java中类级别的锁,通过...

    java源码剖析-ConcurrentHashMap

    - **`Segment`**:它是`ConcurrentHashMap`的核心组件之一,负责存储数据并管理锁。 - `count`:表示当前`Segment`中的元素个数。 - `modCount`:记录了对`table`进行修改的次数。 - `threshold`:扩容阈值,当...

    java集合-ConcurrentHashMap的使用

    ConcurrentHashMap使用了分段锁(Segment)来实现并发的读写操作,每个Segment都相当于一个小的HashMap,将整个哈希表分成多个部分。这样可以同时进行多个线程的并发读写操作,不会阻塞其他线程的访问。 需要注意的...

    java7-8中的 HashMap和ConcurrentHashMap全解析.pdf

    而ConcurrentHashMap是线程安全的HashMap实现,它在Java 7中采用了分段锁(Segment)的设计,每个Segment实际上是一个小型的HashMap,通过锁来确保并发安全。put过程包括: 1. 确保Segment初始化,如果需要则创建新...

    Java-concurrent-collections-concurrenthashmap-blockingqueue.pdf

    ConcurrentHashMap 的实现是基于哈希表的,使用了分段锁机制来实现线程安全。每个段锁都对应一个哈希表的分区,用于存储和访问数据。 ConcurrentHashMap 的实现还使用了链表和树形结构来存储和访问数据,提供了高效...

    71-ConcurrentHashMap笔记1

    相较于早期版本,JDK1.8的ConcurrentHashMap放弃了Segment分段锁的设计,转而采用更细粒度的锁策略,结合Unsafe类的CAS操作和Node节点加锁,实现了高效且线程安全的并发哈希映射。 首先,让我们回顾一下HashMap和它...

    ConcurrentHashMap的实现原理

    其中,Segment 分段锁是 ConcurrentHashMap 中的核心组件,它继承自 ReentrantLock,内部拥有一个 Entry 数组,数组中的每个元素又是一个链表。这种结构使得 ConcurrentHashMap能够实现真正的并发访问。 ...

    Java并发系列之ConcurrentHashMap源码分析

    Java并发系列之ConcurrentHashMap源码分析 ConcurrentHashMap是Java中一个高性能的哈希表实现,它解决了HashTable的同步问题,允许多线程同时操作哈希表,从而提高性能。 1. ConcurrentHashMap的成员变量: ...

    ConcurrentHashMap共18页.pdf.zip

    1. **设计原理**:`ConcurrentHashMap`基于分段锁(Segment)的概念,将整个哈希表分为多个独立的段,每个段有自己的锁,允许不同段同时进行读写操作,从而提高了并发性。 2. **线程安全**:相比于`synchronized ...

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

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

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

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

    Java concurrency集合之ConcurrentHashMap_动力节点Java学院整理

    - `ConcurrentHashMap`则采用了分段锁(Segment)的设计,每个Segment是一个独立的可重入锁(ReentrantLock),通过锁分段技术实现了并发控制,提高了多线程环境下的并发性能。每个Segment内部又是一个类似`HashMap`...

    ConcurrentHashMap思维导图完整版

    本文将结合Java内存模型,分析JDK源代码,探索ConcurrentHashMap高并发的具体实现机制,包括其在JDK中的定义和结构、并发存取、重哈希和跨段操作,并着重剖析了ConcurrentHashMap读操作不需要加锁和分段锁机制的内在...

    ConcurrentHashMap源码剖析

    与传统的基于synchronized关键字实现线程安全的HashTable相比,ConcurrentHashMap通过采用锁分段技术显著提高了并发性能。本文将深入探讨ConcurrentHashMap的内部结构、工作原理及其在实际场景中的应用。 #### 二、...

    Java并发编程笔记之ConcurrentHashMap原理探究.docx

    相比HashTable,ConcurrentHashMap通过采用锁分离技术和更细粒度的锁定策略来提升性能。HashTable使用全局同步锁,即在读写操作时都需要对整个哈希表加锁,这会导致在多线程环境下性能瓶颈。 ConcurrentHashMap的...

    Java并发编程之ConcurrentHashMap.pdf

    ### Java并发编程之ConcurrentHashMap #### 一、概述 `ConcurrentHashMap`是Java并发编程中的一个重要组件,它提供了一种线程安全的哈希表实现方式。与传统的`Hashtable`或`synchronized`关键字相比,`...

Global site tag (gtag.js) - Google Analytics