`
vanadies10
  • 浏览: 81009 次
  • 性别: 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?

相关推荐

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

    这就有可能导致A线程和B线程同时对一个数组扩容,A线程扩容后替换掉老数组,这时B线程使用的数组实际上是A线程扩容后的数组,就会产生线程安全问题。 死锁原因 比如,当前集合数组长度为2,已经有两个元素被放在了...

    JAVA高并发高性能高可用高扩展架构视频教程

    JAVA企业级基础课题(HashMap那些事) 企业架构师必备技能(JAVA核心技术反射) JavaWeb之基础(手写实现Tomcat服务器) java多线程编程 纯手写实现SpringIOC实现过程 JEE企业级开发(企业级项目开发权威指南) 网络爬虫之...

    Java 常见并发容器总结

    Java 常见并发容器总结 JDK 提供的这些容器大部分在 `java.util.concurrent` 包中。 - **`ConcurrentHashMap`** : 线程安全的 `HashMap` - **`CopyOnWriteArrayList`** : 线程安全的 `List`,在读多写少的场合性能...

    java7hashmap源码-java-note:笔记

    hashmap源码 java-notes 算法 数据结构 设计模式 基础 集合 ConcurrentHashMap IO 并发 [Java 并发]( 并发.md) AQS 源码 JVM web 基础 [NGINX 简介](./docs/nginx/NGINX 简介.md) 框架 Spring [观察 Spring bean ...

    java7hashmap源码-Concurrency:java高并发编程

    hashmap源码 ##Java 并发和高并发 ###ava 多线程模块: 并发的基本概念: 同时拥有一个或者多个线程,如果程序在单核处理器上运行,多个线程将交替的换入或者换出内存。 一个线程对应者Cpu的一个内核。现在系统都是...

    Java后端面试问题整理.docx

    • 熟悉Java多线程并发中线程基本方法,线程池,线程生命周期,熟悉Java锁中常见锁分类(乐观/悲观锁、自旋锁、独/共享锁、可重入锁、公平/非公平锁、分段锁、偏向锁,轻/重量级锁)和基本的锁升级策略

    Java面试题-并发.docx

    接着,文档讨论了负载因子的概念及其取值为0.75的原因,以及HashMap在多线程环境下的线程安全性问题,指出了可能导致CPU利用率达到100%的并发扩容问题,并提出了解决方案。 此外,文档介绍了哈希冲突的概念和解决...

    疫苗:Java HashMap的死循环

    这个事情我4、5年前也经历过,本来觉得没什么好写的,因为Java的HashMap是非线程安全的,所以在并发下必然出现问题。但是,我发现近几年,很多人都经历过这个事(在网上查“HashMap Infinite Loop”可以看到很多人都...

    java7hashmap源码-java-concurrency-programming:java并发编程入门

    java并发编程入门 基本概念 并发: 同时拥有俩个或者多个线程,如果线程在单核处理器上运行,多个线程将交替的换入或者换出内存,这些线程是同时 "存在" 的,每个线程都处于执行过程中的某个状态,如果运行在多核...

    java7hashmap源码-backend-study:后端学习之路

    java7 hashmap源码 随着Java学习的不断深入,发现很多知识在脑海里都是一个个碎片,建此仓库的目的希望把零碎的知识点都整合起来,...并发 概述 :star::star: :star::star: 线程池 :star: AQS :star: 锁 ListenalbeFut

    java学习笔记,包括JVM,并发,JDK一些工具的源码,spring,hashMap实现源码分析

    java学习笔记,包括JVM,并发,JDK一些工具的源码,spring,hashMap实现源码分析

    java7hashmap源码-Excellent-Blog-share:欢迎分享优秀博客

    java并发 java集合相关 Others DesignPatterns系列 Dubbo系列 Zookeeper系列 Redis系列 - [伯乐在线——Redis]() MQ系列 Database系列 - [MySQL索引和SQL调优]() - [揪出MySQL延迟上千秒的元凶]() - [掌握MySQL...

    Java魔法解密:揭秘HashMap底层机制.pptx.pptx

    HashMap的存储结构 HashMap内部采用数组和链表的方式存储数据,每个元素都包含...HashMap通过synchronized关键字实现线程安全,确保多线程环境下的数据一致性和并发访问的安全性,避免潜在的竞争条件和数据不一致问题。

    Java高并发高性能分布式框架从无到有微服务架构设计.doc

    MapDB: mapdb是一个内嵌的纯java的数据库,提供了并发的HashMap、TreeMap、Queue,可以基 于堆外或者磁盘来存储数据高并发-应用缓存堆外缓存 即缓存数据存储在堆外内存,可以减少GC暂停时间(堆对象转移到堆外,GC...

    java面试常见问题

    在我初入职场的时候,类似于 Vector 与 Array 的区别、HashMap 与 Hashtable 的区别是最流行的问题,只需要记住它们,就能在面试中获得更好的机会,但这种情形已经不复存在。如今,你将会被问到许多 Java 程序员都...

    java7hashmap源码-Rebuild-Java:再度重修JAVA

    并发编程实战手册》的里面代码练习 LintCOde文件夹是在刷刷的题目,练练大脑。 看ArrayList.java源码是发现的有一个fast-fail; 快速失败迭代器 安全失败迭代器 在迭代时不允许修改集合 在迭代时允许修改集合 迭代时...

    java7hashmap源码-learning-record:学习轨迹记录

    java7 hashmap源码 learning-record ...《Java并发编程的艺术》 8.3 控制并发线程数的Semaphore 《Java并发编程的艺术》 8.4 线程间交换数据的Exchanger 6月20号 [HashMap,LinkedHashMap,TreeMap的区别]

    「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识 准备 Java 面试,首选.zip

    基础 知识点/面试题总结 : (必看 ): Java 基础常见知识点&面试题总结(上) Java 基础常见知识点&面试题总结(中) ...Java 并发常见知识点&面试题总结(上) Java 并发常见知识点&面试题总结(中) Jav

    java7hashmap源码-learn-java-source:学习java源码,java1.8

    java7 hashmap源码 learn-java 学习java源码 集合 并发集合 队列 线程 面试

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....

Global site tag (gtag.js) - Google Analytics