`
nwangwei
  • 浏览: 24069 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

并发访问和修改HashMap导致的CPU奇高

阅读更多

现象为:CPU持续满负荷运转,但是http连接数不见减少。
使用jstack做了dump,发现如下stack,原来是servlet中访问HashMap是非同步的。

"http-80-136" daemon prio=10 tid=0x7e59c000 nid=0x1b1 runnable [0x794e1000..0x794e1db0]
   java.lang.Thread.State: RUNNABLE
	at java.util.HashMap.get(HashMap.java:303)

 

通过关键字:HashMap.java:303 也可以在搜索引擎中得到更多详细信息。

 

分享到:
评论

相关推荐

    HashMap导致CPU100% 的分析

    HashMap导致CPU100% 的分析

    HashMap和HashTable的区别和不同

    如果多个线程并发地访问并修改`HashMap`,则可能导致数据不一致性问题。为了在多线程环境中安全地使用`HashMap`,开发者需要自己负责同步,例如使用`Collections.synchronizedMap(new HashMap,V>())`创建线程安全的`...

    经典讲解List和ArrayList和Vector和HashTable和HashMap区别

    - **数据访问**:`ArrayList`和`Vector`支持通过索引访问元素,而`HashTable`和`HashMap`通过键来访问值。 - **效率**:`ArrayList`和`HashMap`在插入和删除元素时比`Vector`和`HashTable`更快,因为它们的同步机制...

    TBB 开源库及并发 Hashmap 的使用

    TBB 并发容器是 TBB 中的一个重要组成部分,提供了一些支持多线程并发访问的容器,如 concurrent_vector、concurrent_bound_queue、concurrent_priority_queue、concurrent_hash_map、concurrent_unordered_map 等。...

    hashmap面试题_hashmap_

    HashMap迭代器在修改时不会抛出ConcurrentModificationException,而Hashtable会。 5. HashMap的并发问题如何解决? 答:在多线程环境下,可以使用ConcurrentHashMap,它是线程安全的HashMap实现。 五、HashMap与...

    高级程序员必会的HashMap的线程安全问题,适用于0~2年的.7z

    由于HashMap不是线程安全的,一个线程在遍历HashMap的同时,另一个线程对HashMap进行修改(如添加、删除元素),会导致迭代器失效,从而抛出异常。 2. **数据不一致**:由于HashMap的内部实现,如resize操作,可能...

    hashtable和hashmap的区别

    因此,在多线程环境中使用`HashMap`时,如果不采取额外的同步措施,可能会导致数据不一致或其他并发问题。 #### 2. 同步机制 - **Hashtable**: 使用内部同步机制来确保线程安全,这意味着在执行关键操作时会锁定...

    hashMap和hashTable的区别

    如果多个线程同时访问一个 `HashMap` 实例,而其中至少一个线程修改了该 `HashMap` 结构,则必须保持外部同步。 - **HashTable**:是线程安全的,即同步的。它的所有公共方法都是 `synchronized` 的,这意味着可以...

    简单的key value hashmap

    然而,由于其非线程安全的特性,对于多线程环境,通常需要考虑使用`ConcurrentHashMap`来保证并发访问的安全性。此外,还需注意内存占用,因为HashMap会存储键值对的引用,如果键或值是大对象,可能会导致内存消耗过...

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

    1. 多线程环境下并发修改:在多线程环境下,如果多个线程同时对HashMap进行读写操作,可能会导致数据的不一致性和数据丢失。例如,当一个线程正在执行put操作时,另一个线程可能同时在进行get或remove操作,这可能...

    比较Vector、ArrayList和hashtable hashmap

    因此,如果多线程并发访问 Vector,通常需要通过 synchronized 关键字进行同步控制。 HashMap 类 HashMap 是一个散列表,它存储元素对(键值对)。HashMap 使用哈希函数将键映射到桶中,这样可以快速定位到对应的值...

    Hashtable和HashMap区别

    在Java编程语言中,`Hashtable`和`HashMap`是两种非常重要的数据结构,它们都属于`Map`接口的实现类,用于存储键值对数据。尽管两者在功能上相似,但在实际应用中却存在显著差异。 #### 1. 历史与实现基础 `...

    HashMap介绍和使用

    ### HashMap介绍和使用详解 #### 一、HashMap的数据结构 HashMap是Java集合框架的一个重要组成部分,它实现了Map接口,能够存储键值对映射。在Java编程语言中,最基本的数据结构有两种:数组和引用(模拟指针)。...

    HashMap与HashTable区别

    如果多个线程同时访问一个`HashMap`实例,且至少有一个线程修改了该`HashMap`,则必须通过外部同步来保证线程安全。例如,可以通过将`HashMap`对象包装在一个`Collections.synchronizedMap()`返回的对象中来实现这...

    Hashtable和HashMap的区别:

    相反,如果你的应用程序需要处理多线程并发问题,并且对线程安全性有严格要求,那么 `Hashtable` 或者通过 `Collections.synchronizedMap()` 包装后的 `HashMap` 更适合。了解这些区别有助于开发者在实际开发过程中...

    Go-Golang无锁线程安全的HashMap为最快的读取访问进行了优化

    通过巧妙的设计和利用Go的并发特性,可以构建出既线程安全又具有高性能的HashMap。 综上所述,构建一个无锁线程安全的HashMap需要理解并发编程的基本原理,熟悉Go的原子操作,以及对数据结构和哈希算法的深入掌握。...

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

    3. 避免在高并发环境下频繁地触发HashMap的扩容操作,可以通过适当调整加载因子和初始化容量来减少扩容的概率。 总之,理解HashMap的扩容机制和潜在的问题对于编写高性能、线程安全的Java程序至关重要。在多线程...

    Javascript实现和操作HashMap

    - JavaScript对象的属性访问速度非常快,但它们的顺序是不确定的,这与传统HashMap的有序性可能有所不同。 - 当键是对象时,JavaScript会使用对象的`toString()`方法生成哈希码,可能导致意外的结果。因此,使用对象...

    HASHMAP缓存.txt

    ` 锁对象用于在多线程环境下同步对HashMap的操作,防止并发修改异常。 3. **私有构造函数**:`private DataCache() {}` 这表明`DataCache`类不希望外部直接实例化,而是通过静态方法访问。 4. **获取数据的方法**...

Global site tag (gtag.js) - Google Analytics