建议使用的时候要避免key的hashcode重复,如果一样是会发生死循环的。
例子:
Map<String, Integer> map = new ConcurrentHashMap<>(16);
map.computeIfAbsent(
“AaAa”,
key -> {
return map.computeIfAbsent(
“BBBB”,
key2 -> 42);
}
);
先调用了 get 方法,如果返回为 null,则调用 putIfAbsent 方法,这样就能不会有问题了。
改:
if(map.get(“BBBB”)==null){
map.computeIfAbsent(
“BBBB”,
key2 -> 42);
}
map.computeIfAbsent( “AaAa”,
key -> {
return map.get(“BBBB”);
});
详细解决方案
jdk 8 ConcurrentHashMap computeIfAbsent 里面也有死循环
热度:24 发布时间:2023-11-25 08:23:21.0
相关解决方案
- ConcurrentHashMap 原子性
- java常用集合的理解,HMap,ConcurrentHashMap,List,set
- java容器之 ConcurrentHashMap jdk1.8 思路整理
- 常用并发数据结构:CopyOnWriteArrayList,CopyOnWriteArraySet,ConcurrentHashMap
- 为什么Vector、HasTable是线程安全的?ConcurrentHashMap 分段锁?
- ConcurrentHashMap(待补充)
- 学习笔记————————ConcurrentHashMap,CopyOnWriteArrayList
- 匿名内部类+泛型通配符+map遍历+特殊字符转义+atomicInteger+json对象和map+Function.identity()+ConcurrentHashMap-8/3~8/7
- Java-Map:HashMap,HashTable,ConcurrentHashMap,HashSet
- ConcurrentHashMap 1.8版本介绍
- 《Java源码分析系列》:ConcurrentHashMap JDK1.8
- ConcurrentHashMap.jdk1.8 put操作:
- JAVA集合框架(三)HashMap,ConcurrentHashMap,Hashtable
- jdk 8 ConcurrentHashMap computeIfAbsent 里面也有死循环
- ConcurrentHashMap 1.7与1.8的锁区别,以及数据结构区别
- 如何保证容器是线程安全的?ConcurrentHashMap 如何实现高效地线程安全?
- 第14题-ConcurrentHashMap
- ConcurrentHashMap 源码赏析
- JUC-6.1-并发容器-ConcurrentHashMap
- HashMap+ConcurrentHashMap+HashTable
- 【集合】HashTable ConcurrentHashMap
- 并发编程之 ConcurrentHashMap(JDK 1.8) putVal 源码分析
- concurrentHashMap 1.8原理
- HashTable 和 ConCurrentHashMap 概述
- 并发编程——ConcurrentHashMap#transfer() 扩容逐行分析
- Jdk1.7 与 Jdk1.8 中 HashMap ConcurrentHashMap 的 变化
- 如何保证容器是线程安全的?ConcurrentHashMap 如何实现高效地线程安全
- 【集合Map系列四】ConcurrentHashMap
- Java 集合 (10) -- ConcurrentHashMap 类
- Java8 - Map新增的方法:computeIfAbsent