ConcurrentHashMap 是一个并发散列映射表的实现,它允许完全并发的读取,并且支持给定数量的并发更新。相比于 HashTable 和
用同步包装器包装的 HashMap(Collections.synchronizedMap(new HashMap())),ConcurrentHashMap 拥有更高的并发性。在 HashTable 和由同步包装器包装的 HashMap 中,使用一个全局的锁来同步不同线程间的并发访问。同一时间点,只能有一个线程持有锁,也就是说在同一时间点,只能有一个线程能访问容器。这虽然保证多线程间的安全并发访问,但同时也导致对容器的访问变成
串行化
的了。
在使用锁来协调多线程间并发访问的模式下,减小对锁的竞争可以有效提高并发性。有两种方式可以减小对锁的竞争:
- 减小请求 同一个锁的 频率。
- 减少持有锁的 时间。
ConcurrentHashMap 的高并发性主要来自于三个方面:
- 用分离锁实现多个线程间的更深层次的共享访问。
- 用 HashEntery 对象的不变性来降低执行读操作的线程在遍历链表期间对加锁的需求。
- 通过对同一个 Volatile 变量的写 / 读访问,协调不同线程间读 / 写操作的内存可见性。
使用分离锁,减小了请求 同一个锁的频率。
通过 HashEntery 对象的不变性及对同一个 Volatile 变量的读 / 写来协调内存可见性,使得 读操作大多数时候不需要加锁就能成功获取到需要的值。由于散列映射表在实际应用中大多数操作都是成功的 读操作,所以 2 和 3 既可以减少请求同一个锁的频率,也可以有效减少持有锁的时间。
通过减小请求同一个锁的频率和尽量减少持有锁的时间 ,使得 ConcurrentHashMap 的并发性相对于 HashTable 和
用同步包装器包装的 HashMap有了质的提高。
参考:
http://www.ibm.com/developerworks/cn/java/java-lo-concurrenthashmap/index.html
分享到:
相关推荐
`ConcurrentHashMap`通过分段锁和非阻塞读等机制实现了高性能的并发访问,非常适合于多线程环境下的使用。相比于传统的同步容器如`Hashtable`,`ConcurrentHashMap`提供了更精细的锁粒度,减少了锁竞争,从而提高了...
ConcurrentHashMap 的实现原理使得它具有很高的并发能力,在高并发情况下,ConcurrentHashMap 的性能要比普通的 HashMap 好很多。同时,ConcurrentHashMap 也提供了非常好的线程安全性,能够确保多个线程同时访问 ...
如果需要线程安全且并发性能较高,那么ConcurrentHashMap是首选。但在单线程或者并发需求较低的环境中,HashMap由于其简单高效的设计,通常会提供更好的性能。 总之,ConcurrentHashMap通过锁分离技术和细粒度的...
在Java并发编程中,ConcurrentHashMap是一个重要的并发集合。它是由Doug Lea在JSR166y中引入,并在Java 5中提供的一种线程安全的HashMap...因此,在设计需要高并发性能的程序时,ConcurrentHashMap是一个非常好的选择。
`ConcurrentHashMap`是Java 5引入的一种高性能、线程安全的散列表实现。相较于传统的`HashMap`,`ConcurrentHashMap`能够支持高并发环境下的多线程读写操作。本文将深入探讨`ConcurrentHashMap`的关键实现细节,包括...
而在多线程并发环境中,特别是需要高并发读写操作时,`ConcurrentHashMap`是更好的选择。 总的来说,`HashMap`和`ConcurrentHashMap`都是Java中处理键值对的重要工具,它们各自具有不同的特性和使用场景。理解它们...
ConcurrentHashMap是Java中一个高性能的哈希表实现,它解决了HashTable的同步问题,允许多线程同时操作哈希表,从而提高性能。 1. ConcurrentHashMap的成员变量: ConcurrentHashMap有多个成员变量,它们在初始化...
【压缩包子文件的文件名称列表】中的"赚钱项目"看起来与`ConcurrentHashMap`的主题不直接相关,可能是压缩包内其他内容的误放,或者是一种隐喻,暗示掌握并发编程和高效数据结构对于开发高并发、高性能的软件项目的...
### Java并发编程之ConcurrentHashMap #### 一、概述 ...总之,`ConcurrentHashMap`通过其独特的设计,不仅提供了线程安全性,还在多线程环境下实现了高性能,成为Java并发编程中不可或缺的一部分。
"高性能java代码优化建议"这一主题涵盖了众多资深开发者积累的实践经验,旨在帮助开发者编写出更高效、性能更强的代码。以下是一些关键的知识点: 1. **避免过度使用同步**:在多线程环境中,过多的同步可能导致...
### 高性能Java系统实现与调优 #### 核心概念与原则 - **木桶原理**:在高性能系统的构建中,系统的整体性能受到最短板(即性能最低的部分)的限制。因此,优化的重点在于识别并提升这些瓶颈,确保整个系统能够...
- `HashTable`是线程安全的,但其线程安全的实现方式过于简单,所有操作都使用`synchronized`关键字,这使得在高并发环境下性能低下,因为所有操作都被串行化。 **ConcurrentHashMap**: `ConcurrentHashMap`在设计...
ConcurrentHashMap适用于高并发读写场景,同时保证了线程安全。 在Java中,如果需要一个线程安全的哈希表,推荐使用ConcurrentHashMap而不是HashTable。ConcurrentHashMap通过其特有的设计,在保证线程安全的同时,...
《深入JVM和调优+高性能并发Web服务器实现核心内幕》这一主题涵盖了Java开发中的关键领域,包括Java虚拟机(JVM)的工作原理、性能优化以及高性能并发Web服务器的实现策略。以下是对这些知识点的详细阐述: 1. **...
HashTable虽然解决了线程安全问题,但它采用了全局锁,导致在高并发情况下性能低下。而JDK1.8之前的ConcurrentHashMap则引入了Segment分段锁,每个Segment相当于一个小的HashMap,这样可以在一定程度上提高并发性,...
相比于HashMap,ConcurrentHashMap在多线程环境下提供了线程安全的保证,避免了因扩容导致的CPU资源消耗过高问题。传统的线程安全解决方案,如Hashtable或使用Collections.synchronizedMap包装HashMap,虽然实现了...