`
caoruntao
  • 浏览: 475926 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

ConcurrentHashMap与CopyOnWriteArrayList比较

    博客分类:
  • java
 
阅读更多

【转】http://www.iteye.com/topic/841519

ConcurrentHashMap
ConcurrentHashMap引入了Segment,每个Segment又是一个hashtable,相当于是两级Hash表,然后锁是在Segment一级进行的,提高了并发性。缺点是对整个集合进行操作的方法如 size() 或 isEmpty()的实现很困难,基本无法得到精准的数据。Segment的read不加锁,只有在读到null的情况(一般不会有null的,只有在其他线程操作Map的时候,所以就用锁来等他操作完)下调用了readValueUnderLock。数据存储是采用hash表的方式将元素分布在各bucket之间,当遍历一个hash表的bucket以期找到某一特定的key时, get() 必须对大量的候选bucket调用 Object.equals() 。如果key类所使用的 hashCode() 函数不能将value均匀地分布在整个hash表范围内,或者存在大量的hash冲突,那么某些bucket链就会比其他的链长很多,而遍历一个长的hash链以及对该hash链上一定百分比的元素调用 equals() 是一件很慢的事情,所以会影响迭代效率。

CopyOnWriteArrayList
CopyOnWriteArrayList是ArrayList 的一个线程安全的变体,ArrayList实现了RandomAccess接口,表明其支持快速的随机访问。读的时候就是在引用的当前对象上进行读(包括get,iterator等),不存在加锁和阻塞,针对iterator使用了一个叫COWIterator 的阉割版迭代器,因此不支持写操作,当获取CopyOnWriteArrayList的迭代器时,是将迭代器里的数据引用指向当前引用指向的数据对象,无论未来发生什么写操作,都不会再更改迭代器里的数据对象引用,所以迭代器也很安全。CopyOnWriteArrayList中写操作需要大面积复制数组,所以性能肯定很差,读操作和写操作针对的不是同一个对象,所以读之间也不需要加锁,读和写之间的同步处理只是在写完后通过一个简单的“=”将引用指向新的数组对象上来。适合使用在读操作远远大于写操作的场景。

分享到:
评论

相关推荐

    Java并发编程(一)

    并发集合(Concurrent Collections):Java并发工具包提供了一套特殊的集合类,如ConcurrentHashMap、CopyOnWriteArrayList等,它们在内部实现了高效线程安全的并发操作。 线程池(Thread Pool):ExecutorService...

    基于Java多线程与线程安全实践(源码+使用文档)

    并发集合操作:展示如何在多线程环境下安全地操作集合类,如ConcurrentHashMap和CopyOnWriteArrayList。 线程生命周期管理:示例代码展示如何创建、启动、管理和终止线程。 线程通信:展示线程间的通信机制,包括...

    Java并发系列之ConcurrentHashMap源码分析

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

    第三章 CopyOnWriteArrayList源码解析1

    4. **允许重复数据**:与ArrayList一样,CopyOnWriteArrayList允许列表中存在相同的元素。 5. **效率**:CopyOnWriteArrayList在大部分情况下非常适合读多写少的并发场景。当写操作频繁时,由于频繁复制数组,可能...

    java并发编程艺术源码

    4. **并发容器**:包括ArrayList、LinkedList、Vector、Stack、ConcurrentHashMap、CopyOnWriteArrayList等,其中ConcurrentHashMap和CopyOnWriteArrayList等是线程安全的容器,适合在并发环境中使用。 5. **原子类...

    java面试题 包含上百家公司面试真题

    **多线程与并发**:Java并发编程是高级面试的重要部分,包括线程同步(synchronized、Lock)、并发工具类(CountDownLatch、CyclicBarrier、Semaphore、ExecutorService)、线程池、并发集合(ConcurrentHashMap、...

    狂神说Java-多线程课程全部代码.rar

    Java提供了一套强大的并发工具,包括synchronized关键字、volatile变量、Atomic类、Lock接口(如ReentrantLock)以及并发集合(如ConcurrentHashMap、CopyOnWriteArrayList等)。这些工具可以帮助开发者在多线程环境...

    Java并发包源码分析(JDK1.8)

    AQS相关应用(CountDownLatch、CyclicBarrier、Semaphore等),executor(ThreadPoolExecutor、ScheduledThreadPoolExecutor、FutureTask等),collection(ConcurrentHashMap、CopyOnWriteArrayList等), ...

    java常见面试题,面试专用笔记,非常全面

    如ConcurrentHashMap和CopyOnWriteArrayList等并发容器,用于在多线程环境下提供高性能的并发操作。 15. 注解(Annotation): 注解在Java中用于元数据,可以用于编译时检查、运行时处理以及简化代码。面试中可能会...

    Java并发编程:阻塞队列

    我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。我们来讨论另外一类容器:阻塞队列。  在前面我们...

    Java多线程-知识点梳理和总结-超详细-面试知识点.docx

    逐步深入到Java多线程的高级话题,涵盖了Java多线程的所有方面,包括volatile关键字、Java内存模型、Happens-Before关系、synchronized关键字、ConcurrentHashMap、CopyOnWriteArrayList、Thread安全和CAS操作等。...

    Java 10道中级面试题.docx

    以上知识点展示了 Java 在实际编程中的核心概念,包括数据结构(HashMap、LinkedList)、并发(迭代器、线程安全)以及集合框架(ArrayList、ConcurrentHashMap、CopyOnWriteArrayList)。理解和掌握这些知识点对于...

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

    并发编程主要通过Java线程API(如Thread类和Runnable接口)、同步工具(如synchronized关键字、wait()和notify()方法、Semaphore、CyclicBarrier、CountDownLatch等)、并发集合(如ConcurrentHashMap、...

    《Java并发编程高阶技术-高性能并发框架源码解析与实战》学习.zip

    本书的焦点在于Java并发框架,这些框架如线程池(java.util.concurrent.ThreadPoolExecutor)、并发集合(ConcurrentHashMap、CopyOnWriteArrayList等)以及同步工具类(Semaphore、CyclicBarrier、CountDownLatch等...

    java面试题,内容详细,包含mysql,多线程,中间件

    面试者还应熟悉并发容器(如ConcurrentHashMap和CopyOnWriteArrayList)以及并发工具类(如CountDownLatch、CyclicBarrier和Semaphore)。 最后,中间件是Java面试中的另一个重要领域,它涉及到应用程序之间的通信...

    Java并发编程实践

    Java集合框架为并发编程提供了专门的类,如ConcurrentHashMap、CopyOnWriteArrayList和BlockingQueue。这些集合在内部实现了线程安全,允许并发读写而不会导致数据不一致。例如,ConcurrentHashMap使用分段锁技术...

    Java高并发编程与JVM性能调优实战 视频教程 下载下载因为太大存百度云盘2.zip

    3. **并发集合**:探讨并发安全的集合框架,如ConcurrentHashMap、CopyOnWriteArrayList和CopyOnWriteArraySet,理解它们在多线程环境下的工作原理。 4. **并发设计模式**:介绍生产者-消费者模型、读写分离策略、...

    Java高并发程序设计视频

    并发集合的原理与使用,如线程安全的`ConcurrentHashMap`和在并发环境下避免数据不一致的`CopyOnWriteArrayList`;以及线程通信的工具,如`BlockingQueue`和` Phaser`等。 通过学习本课程,开发者将能够掌握Java...

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

    可能会讨论Java中如何实现线程同步(如synchronized关键字、wait/notify机制、ReentrantLock等)、线程池的工作原理(ExecutorService、...ConcurrentHashMap、CopyOnWriteArrayList)的特点与应用场景...

    java优化编程ppt讲义,附代码

    - 并发集合类:ConcurrentHashMap、CopyOnWriteArrayList等的原理与优化。 6. **方法优化** - 方法参数传递:值传递与引用传递的性能差异,以及如何选择。 - 函数式编程:使用Lambda表达式提升代码效率和可读性...

Global site tag (gtag.js) - Google Analytics