Hashmap 是线程不安全的,HashMap 底层是一个 Entry 数组,当发生 hash 冲突的时候,hashmap 是采用链表的方式来解决的 1 1 分享 1 张老师 展开 不是线程安全的;如果有两个线程A和B,都进行插入数据,刚好这两条不同的数据经过哈希计算后得到的哈希码是一样的,且该位置还没有其他的数据。所以这两个线程都...
addEntry方法依然不是同步的,所以导致了线程不安全出现伤处问题,其他类似操作不再说明,源码一看便知,下面主要说一下另一个非常重要的知识点,同样也是HashMap非线程安全的原因,我们知道在HashMap存在扩容的情况,对应的方法为HashMap中的resize方法: voidresize(inti) { Entry aentry[] = table; intj = aentry.len...
(多线程下不建议用HashMap) 一句话总结就是,并发环境下HashMap的rehash过程可能会带来循环链表,导致死循环致使线程挂掉。 因此并发环境下,建议使用Java.util.concurrent包中的ConcurrentHashMap以保证线程安全。 至于HashTable,它并未使用分段锁,而是锁住整个数组,高并发环境下效率非常的低,会导致大量线程等待。 同样的,...
5.如果项目中出现CPU占用过高的情况,该怎么排查和处理?6.介绍一下Linux常见命令?top命令具体是做什么的?7.讲一下HashMap,为什么HashMap要引入红黑树?为什么树化的默认节点是8?如果不用红黑树如何处理过长的链表?8.HashMap是线程安全的吗?如果不是那什么是?9.为什么ConcurrentHashMap是线程安全...