/** * ConcurrentHashMapAnalyze.java */ package com.xxx.common.concurrent; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * ConcurrentHashMap 结构分析和使用 */ public class ConcurrentHashMapAnalyze { // 多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%. // Hashtable使用synchronized来保证线程安全,在线程竞争激烈的情况下效率非常低. // 基于以上两个原因,ConcurrentHashMap闪亮登场. // 锁分段技术、Segment(锁角色)数组和HashEntry(存储键值)数组结构. // 一个ConcurrentHashMap包含一个Segment数组,一个Segment里包含一个HashEntry数组. // 每个HashEntry是一个链表结构的元素. /** * Application entry point. */ public static void main(String[] args) { // 默认初始化大小为16(即Segment数组的长度为16,即有16把分段锁) Map<String, String> concurrentHashMap = new ConcurrentHashMap<String, String>(); for (int i = 0; i < 20; i++) { // 通过对元素hashCode进行再哈希定位到Segment // 目的是为了减少哈希冲突,使元素均匀分布在不同的Segment // 定位到相应的Segment后加锁,判断扩容及扩容. concurrentHashMap.put("I" + i, "I" + i); } for (String key : concurrentHashMap.keySet()) { // Get操作简单高效,先经过一次再哈希,然后使用这个哈希值通过哈希运算 // 定位到Segment,再通过哈希算法定位到元素,过程不需要加锁. String ts = concurrentHashMap.get(key); System.out.println(ts); } // 先通过两次不锁定Segment累加大小,如果统计过程中计数有变化再加锁统计. System.out.println(concurrentHashMap.size()); } }
相关推荐
ConcurrentHashMap源码分析源码分析 代码解释非常详细!!!!
源码分析见我博文:http://blog.csdn.net/wabiaozia/article/details/50684556
Java并发系列之ConcurrentHashMap源码分析 ConcurrentHashMap是Java中一个高性能的哈希表实现,它解决了HashTable的同步问题,允许多线程同时操作哈希表,从而提高性能。 1. ConcurrentHashMap的成员变量: ...
程序员面试加薪必备_ConcurrentHashMap底层原理与源码分析深入详解
ConcurrentHashMap 底层实现机制分析 在本文中,我们将深入探索 ConcurrentHashMap 的高并发实现机制,并分析其在 Java 内存模型基础上的实现原理。了解 ConcurrentHashMap 的实现机制有助于我们更好地理解 Java ...
通过以上分析,我们可以看到ConcurrentHashMap如何通过锁分段技术来解决HashMap在并发环境下的线程安全问题,并通过巧妙的设计减少线程间锁的竞争,从而提升性能。因此,在设计需要高并发性能的程序时,...
- 为了提高并发性能,`ConcurrentHashMap`使用了CAS操作来避免锁的使用,降低了锁竞争。此外,通过非阻塞的查找和更新策略,使得并发性能大大提升。 总的来说,JDK8版本的`ConcurrentHashMap`通过更细粒度的锁和...
我们首先来理解`computeIfAbsent`方法的基本概念,然后再深入分析这个问题的成因及解决方案。 `computeIfAbsent`是JDK 1.8中新增的一个功能强大的方法,它的作用是在给定的键不存在于映射中时,通过提供的函数来...
本文将对ConcurrentHashMap#put方法的源码进行详细分析,从而帮助读者更好地理解ConcurrentHashMap的工作机理。 一、ConcurrentHashMap的底层原理 ConcurrentHashMap是基于哈希表实现的,可以存储大量的数据。其...
在默认理想状态下,ConcurrentHashMap可以支持16个线程执行并发写操作及任意数量线程的读操作。本文将结合Java内存模型,分析JDK源代码,探索ConcurrentHashMap高并发的具体实现机制,包括其在JDK中的定义和结构、...
通过以上分析可以看出,`ConcurrentHashMap`的设计非常巧妙,它利用锁分离技术和不可变性来实现高效的并发访问。这种设计不仅提高了多线程环境下的性能,同时也保持了良好的线程安全性。对于需要在多线程环境下高效...
综上所述,"ConcurrentHashMap共18页.pdf.zip"这份文档很可能是深入分析 ConcurrentHashMap 的详细指南,涵盖了其设计原理、实现机制以及最佳实践。如果你对并发编程或者Java集合框架有深入需求,这份资料将是一份...
本文主要分析`ConcurrentHashMap 1.7`的`put`方法及其涉及到的关键技术。 首先,`put`方法的执行流程要求`key`不能为`null`,否则会抛出`NullPointerException`。根据`key`的哈希值计算出`segments`数组的对应下标`...
【源码分析】深入理解`ConcurrentHashMap`的工作原理,需要查看其源码,特别是`put`、`get`、`resize`等关键操作,以及在不同版本中的变化,例如Java 8引入的红黑树优化。 总结,`ConcurrentHashMap`是Java并发编程...
对JDK1.7中ConcurrentHashMap容器初始化、添加安全、扩容安全、获取集合长度这些方法进行了详细的分析
因此,ConcurrentHashMap的初始化过程中使用了自旋锁来实现多线程间的同步,这样可以提高效率和避免死循环。 在学习ConcurrentHashMap的初始化过程时,我们可以学习到自旋锁的实现方式,以及它与死循环方式的不同。...
在`ConcurrentHashMap`的源码分析中,可以看到它通过`volatile`关键字保证了`HashEntry`中`value`字段的可见性,确保了读操作的正确性,而其他字段如`key`、`hash`和`next`都是`final`的,防止在链表中进行中间插入...