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

Java HashMap的并发问题

    博客分类:
  • Java
阅读更多

使用Java的同学应该都是知道HashMap是线程不安全的,不能够并发的去put和get,如果有并发操作,会抛出ConcurrentModificationException这个异常。不过可能很多同学没有注意,这个异常并不是一定会抛出的。而并发的去对HashMap对象进行put和get的结果,是可能造成死循环。
     年前在线上,也遇到了这么一次。当时是有同学找过来,说有台机器的load很高,已经启动了流量控制,也没有请求进到容器中。后来dump了thread,也通过top -H看到占用CPU比较高的线程,发现都是在执行HashMap.get,想到可能就是上面的原因,后来看了源码,发现确实是这么一个问题。
 具体对于HashMap在并发操作时陷入死循环的分析,可以参看这篇博客 http://pt.alibaba-inc.com/wp/dev_related_969/hashmap-result-in-improper-use-cpu-100-of-the-problem-investigated.html

分享到:
评论
3 楼 invincibleLiu 2011-05-06  
synchronized(map){
    if(...){
        wait();
    }
    map.put();
    notifyall();
}
synchronized(map){
    if(...){
        wait();
    }
    map.get();
    notifyall();
}
1.这种Pascal式的做法做跟推荐的ConcurrentHashMap有什么区别?性能上的还是......
2.淘宝这样的大型电子商务平台不是强调分布式吗?能否举个Map在实际情况应用的例子
2 楼 vanadies10 2011-04-20  
hesey 写道
请问这种场景下为什么不换成ConcurrentHashMap?

我这里想说的主要不是说应该用什么的问题,而是提醒大家有这么个事情在。尤其是经常处理线上问题的同学。很多代码都不是我们自己写的。
1 楼 hesey 2011-04-19  
请问这种场景下为什么不换成ConcurrentHashMap?

相关推荐

    js 版 java hashmap

    Java的HashMap不是线程安全的,但JavaScript环境通常是单线程的,所以这个问题在JavaScript中可能不那么突出。 综上所述,"js版java HashMap"的实现可能涉及到了哈希函数设计、哈希冲突解决策略、容量管理、遍历...

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

    最后,书中可能介绍了一些最佳实践,如如何避免并发问题、如何正确使用线程同步机制,以及如何进行性能优化等,这些都是实际开发中非常实用的知识。 通过阅读这本书,你可以对Java并发编程有更深入的理解,掌握必要...

    Java HashMap高难度面试题集锦解析Java HashMap面试题及答案解析-高难度

    Java HashMap 是一个非常重要的数据结构,它在面试中经常被问到,因为它涉及到许多底层实现细节和并发问题。以下是对给定的Java HashMap面试题的详细解析: 1. **HashMap的内部实现原理**: HashMap基于哈希表,...

    java并发编程内部分享PPT

    总的来说,这份“java并发编程内部分享PPT”涵盖了Java并发编程的多个重要方面,包括线程创建与管理、同步机制、并发容器、线程池、并发问题以及异步计算。通过深入学习和实践这些知识点,开发者可以更好地应对多...

    java虚拟机并发编程

    - **选择合适的并发工具**:根据具体的场景选择最合适的并发工具,例如使用`ConcurrentHashMap`替代`synchronized`的`HashMap`。 - **减少锁的范围和持续时间**:尽可能减少锁定的代码块大小,并且只在必要时使用锁...

    java的hashMap多线程并发情况下扩容产生的死锁问题解决.docx

    在Java的HashMap中,多线程并发环境下的扩容操作可能会引发死锁问题。这主要发生在JDK 1.7版本,因为其扩容机制采用了头插法。以下详细解释这个问题及其解决方案。 首先,HashMap的扩容机制是在容量达到阈值时触发...

    关于如何解决HashMap线程安全问题的介绍

    总结起来,理解HashMap的线程不安全性及其潜在问题,并根据实际需求选择合适的安全措施,是确保Java程序稳定运行的关键。无论是使用Collections.synchronizedMap()、ConcurrentHashMap还是避免在多线程环境中使用,...

    java 高并发解决 思路

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

    《实战java高并发程序设计》源码整理

    9. **并发模式**:包括生产者消费者模型、读写锁策略、工作窃取模式等,这些模式可以帮助开发者解决特定的并发问题。 10. **线程通信**:`wait()`, `notify()`, `notifyAll()`是Java中基于对象监视器的线程通信方法...

    实战java高并发编程

    最后,高并发编程也涵盖了错误处理和调试技巧,如如何定位和解决死锁、活锁、饥饿等问题,以及如何通过JMX、VisualVM等工具监控和分析线程状态,这些对于排查并发问题十分有用。 总之,《实战Java高并发编程》是一...

    java并发编程实践

    ### Java并发编程实践知识点详解 #### 一、Java并发编程基础 ##### 1.1 并发与并行概念区分 在Java并发编程实践中,首先需要理解“并发”与“并行”的区别。“并发”指的是多个任务同时进行,但实际上可能是在多...

    Java HashMap的工作原理

    其次,由于 HashMap 不是线程安全的,所以在多线程环境中使用时,需要使用 Collections.synchronizedMap() 进行包装,或者使用并发集合如 ConcurrentHashMap。最后,当键的哈希函数质量较差时,可能导致性能下降,...

    Java中HashMap详解(通俗易懂).doc

    - 注意HashMap的并发问题,如果在多线程环境下,使用Collections.synchronizedMap()或使用ConcurrentHashMap来保证线程安全。 总结起来,HashMap和HashSet是Java集合框架的重要组成部分,它们利用哈希技术提供了...

    Java并发编程实践(Java Concurrency in Practice) (中英版)

    3. **并发集合与并发容器**:涵盖了Java并发集合框架,包括线程安全的ArrayList、LinkedList、HashMap等,并介绍了ConcurrentHashMap、CopyOnWriteArrayList等高效率的并发容器。 4. **并发工具**:讨论了Executor...

    java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    ### Java中HashMap, LinkedHashMap, TreeMap,HashTable的区别 在Java编程语言中,`Map`接口是集合框架中的一个重要组成部分,用于存储键值对。本文将详细分析四种常用的`Map`实现类:`HashMap`, `LinkedHashMap`, ...

    汪文君Java高并发实战编程

    3. **并发容器**:讲解Java并发容器的使用,如`ArrayList`, `Vector`, `LinkedList`, `HashMap`, `ConcurrentHashMap`等,对比其线程安全性和性能特性,并讨论`Collections.synchronizedXXX`方法的作用。 4. **...

    JAVA并发编程实践高清版带书签PDF

    5. **并发集合**:书中详细讲解了并发环境下如何使用ArrayList、LinkedList、HashSet、HashMap等集合,以及并发安全的ConcurrentHashMap、CopyOnWriteArrayList等并发集合类。 6. **原子变量(Atomic Variables)**...

    java并发编程经典书籍(英文版)

    - **并发集合**:详述了JUC(Java Util Concurrency)库,包括ArrayList、LinkedList、HashMap等线程安全的改进版本,以及CopyOnWriteArrayList、ConcurrentHashMap等高效并发集合。 - **原子类**:如...

    java 并发学习总结

    Java并发编程是Java开发中的重要领域,涉及到多线程、线程安全以及系统性能优化等多个方面。本学习总结将深入探讨并发容器、同步容器、同步工具、死锁、异常处理、线程中断、线程池、返回结果以及同步方法等核心概念...

    java并发集合

    传统的Java集合,如ArrayList和HashMap,在多线程环境下如果不进行适当的同步控制,可能会引发数据不一致的问题。而并发集合则内置了线程安全机制,比如使用锁或者无锁算法来实现并发访问。 Java并发集合中最核心的...

Global site tag (gtag.js) - Google Analytics