diff --git a/CHANGELOG.md b/CHANGELOG.md
index ec5c7c1d9..3b7f33a87 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,9 +13,12 @@
* 【json 】 新增JSONParser
* 【json 】 JSON新增在解析时的过滤方法(issue#I52O85@Gitee)
* 【core 】 添加ArrayUtil.distinct、CollUtil.distinct重载(issue#2256@Github)
+* 【core 】 添加TransMap、FuncMap、ReferenceConcurrentMap、WeakConcurrentMap
### 🐞Bug修复
* 【core 】 修复StrUtil.firstNonX非static问题(issue#2257@Github)
+* 【core 】 修复SimpleCache线程安全问题
+* 【core 】 修复ClassLoaderUtil中可能的关联ClassLoader错位问题
-------------------------------------------------------------------------------------------------------------
diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/BeanDescCache.java b/hutool-core/src/main/java/cn/hutool/core/bean/BeanDescCache.java
index b41d030c2..fa29e1d94 100644
--- a/hutool-core/src/main/java/cn/hutool/core/bean/BeanDescCache.java
+++ b/hutool-core/src/main/java/cn/hutool/core/bean/BeanDescCache.java
@@ -1,7 +1,7 @@
package cn.hutool.core.bean;
-import cn.hutool.core.lang.SimpleCache;
import cn.hutool.core.lang.func.Func0;
+import cn.hutool.core.map.WeakConcurrentMap;
/**
* Bean属性缓存
@@ -12,7 +12,7 @@ import cn.hutool.core.lang.func.Func0;
public enum BeanDescCache {
INSTANCE;
- private final SimpleCache, BeanDesc> bdCache = new SimpleCache<>();
+ private final WeakConcurrentMap, BeanDesc> bdCache = new WeakConcurrentMap<>();
/**
* 获得属性名和{@link BeanDesc}Map映射
@@ -23,7 +23,7 @@ public enum BeanDescCache {
* @since 5.4.2
*/
public BeanDesc getBeanDesc(Class> beanClass, Func0 supplier) {
- return bdCache.get(beanClass, supplier);
+ return bdCache.computeIfAbsent(beanClass, (key)->supplier.callWithRuntimeException());
}
/**
diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/BeanInfoCache.java b/hutool-core/src/main/java/cn/hutool/core/bean/BeanInfoCache.java
index 7a950ba0c..63fc224d5 100644
--- a/hutool-core/src/main/java/cn/hutool/core/bean/BeanInfoCache.java
+++ b/hutool-core/src/main/java/cn/hutool/core/bean/BeanInfoCache.java
@@ -1,7 +1,8 @@
package cn.hutool.core.bean;
-import cn.hutool.core.lang.SimpleCache;
import cn.hutool.core.lang.func.Func0;
+import cn.hutool.core.map.ReferenceConcurrentMap;
+import cn.hutool.core.map.WeakConcurrentMap;
import java.beans.PropertyDescriptor;
import java.util.Map;
@@ -15,8 +16,8 @@ import java.util.Map;
public enum BeanInfoCache {
INSTANCE;
- private final SimpleCache, Map> pdCache = new SimpleCache<>();
- private final SimpleCache, Map> ignoreCasePdCache = new SimpleCache<>();
+ private final WeakConcurrentMap, Map> pdCache = new WeakConcurrentMap<>();
+ private final WeakConcurrentMap, Map> ignoreCasePdCache = new WeakConcurrentMap<>();
/**
* 获得属性名和{@link PropertyDescriptor}Map映射
@@ -42,7 +43,7 @@ public enum BeanInfoCache {
Class> beanClass,
boolean ignoreCase,
Func0