`
annan211
  • 浏览: 459440 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java 高并发类--ConcurrentHashMap 特性浅析

 
阅读更多
[size=small]
同步容器类在执行每个操作期间都持有一个锁。在一些操作中,例如 HashMap.get 或List.contains,
可能包含大量的工作;当遍历散列桶或链表来查找某个特定的对象时,必须在许多元素上调用equals(equals本身还包含一定的计算量)。
在基于散列的容器中,某些情况下,某个糟糕的散列函数还会把散列表变成现行链表。当遍历很长的链表并且在某些或者全部元素上调用equals方法时,
会话费很长的时间,而其他线程在这段时间内都不能访问该容器。
	与HashMap 一样,ConcurrentHashMap 也是一个基于散列的Map,但他使用了完全不同的加锁策略来提供更高的并发
性和伸缩性
ConcurrentHashMap 并不是将每个方法都在同一个锁上同步并使得每一次只能有一个线程访问容器,而是使用一种力
度更细的加锁机制来实现更大成都的共享,
这种机制称为分段锁(Lock Striping),在这种机制中国,任意数量的读取线程可以并发的访问Map,执行读取操作的
线程和执行写入操作的线程可以并发的访问Map,
并且一定数量的写入线程可以并发的修改Map。ConcurrentHashMap 带来的结果是,在并发访问环境下将实现更高
的吞吐量,二期单线程环境中只损失非常小的性能。
	ConcurrentHashMap 与其他并发容器一起增强了同步容器类:他们提供的迭代器不会抛出ConcurrentModificationException ,
因此不需要在迭代的过程中对容器加锁。 COncurrentHashMap 返回的迭代器具有弱一致性,而并非"及时失败"。
弱一致性的迭代器可以容忍并发的修改,当创建迭代器时会遍历已有的元素,并可以在迭代器被构造之后将修改操作反映给容器。
	尽管有这些改进,但仍然有一些需要权衡的因素。对于一些需要在整个Map上进行计算的方法,例如size 和isEmpty,
这些方法的语义被略微减弱了以反映容器的并发特性。由于size返回的结果在计算时可能已经过期了,他实际上只是一个估值,因此允许size返回
一个近似值而不是一个精确值。这虽然看上去让人不安,但实际上size和isEmpty这样的方法在并发环境下用的很少,因为他们返回的值总在不断变化,因此,
这些操作的需求被弱化了,以换取其他更重要操作的性能优化。包括get/put/containsKey/remove等。
	在ConcurrentHashMap 中没有实现对Map加锁以提供独占访问,在hashtable 和synchronizedMap 中,获取Map的锁能防止其他线程访问这个Map。
在一些不常见的情况下需要这种功能,例如通过原子方式添加一些映射,或者对Map迭代若干次并在此期间保持元素顺序相同。然而,总体来说这种权衡还是合理的
因为并发容器的内容会持续变化。
	与Hashtable 和 synchronizedMap 相比,ConcurrentMap 有这更多的优势和更少的劣势,因此在大多数情况下,用ConcurrentHashMap来代替Map
能进一步提高代码的可伸缩性。只有当应用程序需要加锁Map以独占访问时,才应该放弃使用ConcurrentHashMap.
[/size]
分享到:
评论

相关推荐

    Java-concurrent-collections-concurrenthashmap-blockingqueue.pdf

    Java 并发集合:ConcurrentHashMap 和 BlockingQueue Java 并发集合是 Java 语言中的一种高级hread-safe 集合框架,用于在多线程环境中实现高效、安全的数据存储和访问。其中,ConcurrentHashMap 和 BlockingQueue ...

    实战Java高并发程序设计第二版随书代码

    - **JDK 7及更高版本的新特性**:例如Fork/Join框架、Parallel Streams等,这些都是Java并发编程的最新进展。 随书附带的`concurrentbook`和`concurrentbook-jdk7`文件夹可能包含了与上述知识点对应的示例代码,...

    实战Java高并发程序设计-试读

    第二章可能深入介绍了Java并发工具类,如BlockingQueue(阻塞队列)和ConcurrentHashMap(并发哈希映射)。BlockingQueue在多线程间实现高效的数据传递,它通过阻塞等待或抛出异常的方式确保线程安全。...

    Java-并发容器之ConcurrentHashMap

    总的来说,ConcurrentHashMap是Java并发编程中的重要组件,通过高效的并发控制策略和优化的数据结构,实现了在高并发场景下的高效并发访问。了解并掌握其原理对于提升Java并发编程能力至关重要。

    实战Java高并发程序设计-随书代码

    《实战Java高并发程序设计》是一本专注于Java并发编程实践的书籍,随书代码提供了大量示例,帮助读者深入理解并掌握在实际开发中如何处理高并发场景下的问题。本书的核心知识点涵盖了Java并发编程的基础理论、核心...

    实战Java高并发程序设计(高清版)

    5. **J.U.C框架**:Java并发 utilities (J.U.C) 框架是Java并发编程的重要组成部分,书中会介绍如何利用这个框架来提升并发性能和代码的可读性。 6. **性能调优**:在高并发场景下,性能优化是必不可少的。可能涵盖...

    Java高并发经典文档-PDF-可在电子书里查看

    《实战Java高并发程序设计》是一本专注于Java并发编程的经典文献,它深入浅出地讲解了如何在Java环境中处理高并发场景。这本书是PDF格式,包含详细的目录,方便读者快速定位到所需的知识点,是Java开发者提升并发...

    java高并发程序设计(原版电子书)

    《Java高并发程序设计》是一本深入探讨Java平台上的并发编程技术的专业书籍,由葛一鸣等人编著。这本书旨在帮助读者理解并掌握在高并发环境下编写高效、稳定且可扩展的Java应用程序的关键技巧和最佳实践。以下是该书...

    Java 多线程与并发(13-26)-JUC集合- ConcurrentHashMap详解.pdf

    总结来说,`ConcurrentHashMap`是Java并发编程中的核心组件,它的设计理念和实现方式随着时间的推移不断演进,以适应更高的并发需求和性能优化。理解和掌握其工作原理对于编写高性能并发代码至关重要。

    java源码剖析-ConcurrentHashMap

    ### Java源码剖析-...综上所述,`ConcurrentHashMap`作为Java并发编程中的一个核心组件,通过对`Segment`和`HashEntry`等数据结构的有效利用,以及对读写操作的优化处理,显著提升了多线程环境下的数据访问效率。

    java 高并发解决 思路

    在Java编程领域,高并发处理是一项至关重要的技术,特别是在构建大型、高性能的互联网应用时。本文将基于"java 高并发解决思路"这一主题,深入探讨相关知识点,并结合"高并发web架构.pdf"文档中的实例进行阐述。 1....

    Java高并发视频教学,并带实战java高并发程序设计,高并发面试题目

    首先,"Java线程并发面试题87.pdf"很可能包含了87个关于Java并发的常见面试问题,这些问题涵盖了线程基础知识、同步机制、线程池、死锁避免与解决、并发集合类的使用等多个方面。例如,可能会讨论Java中如何实现线程...

    Java并发编程实践-电子书1-9章pdf

    《Java并发编程实践》是Java开发者深入理解并发编程的重要参考资料,尤其对于想要提升多线程应用设计和性能优化技能的程序员来说,这本书提供了丰富的实践经验和深入的理论知识。以下是根据提供的章节内容概述的一些...

    Java高并发经典文档-MOBI-可在电子书里查看

    Java高并发编程是Java开发中的一个关键领域,尤其在大型分布式系统、互联网应用以及服务器端开发中至关重要。...这份"实战Java高并发程序设计"文档将是你宝贵的参考资料,帮助你在Java并发领域不断精进。

    Java并发编程-并发容器1

    总结起来,Java并发编程中的并发容器,尤其是ConcurrentHashMap,通过巧妙的设计和高效的并发机制,如 CAS 操作和synchronized的使用,实现了线程安全且高性能的键值存储。在面临高并发场景时,ConcurrentHashMap...

    java-java面试题库整理-基础-JVM-线程并发-框架等.zip

    这份"java-java面试题库整理-基础-JVM-线程并发-框架等.zip"文件提供了一个全面的复习资源,帮助求职者准备Java相关的面试。 1. **Java基础知识** - 类与对象:Java是一种面向对象的语言,了解类的定义、构造器、...

    java并发编程-从入门到精通

    Java并发编程是Java开发者必须掌握的关键技能之一,尤其是在开发高性能、多线程的应用时。本教程“java并发编程-从入门到精通”旨在帮助你深入理解这个领域,并逐步提升你的编程能力。 首先,我们要理解Java并发的...

    JAVA并发编程实践-中文-高清-带书签-完整版

    最后,本书还涵盖了Java并发编程的最新发展,如Fork/Join框架和Parallel Streams,这些是Java 7及以后版本引入的新特性,能够帮助开发者充分利用多核处理器的优势,编写出高性能的并行代码。 总而言之,《JAVA并发...

    实战Java高并发程序设计-12333.pdf

    7. **J.U.C(Java并发工具包)**:这部分将详细介绍`java.util.concurrent`包中的各种工具类,如`Future`、`CompletableFuture`以及`ForkJoinPool`和`RecursiveTask`,它们是Java 7引入的并发处理框架,用于并行计算...

Global site tag (gtag.js) - Google Analytics