Merge pull request #2723 from kiritoowo/v5-dev

1.[bug修复] key为弱引用 value为强引用 会导致key无法被回收 弱引用失效
This commit is contained in:
Golden Looly 2022-11-10 11:16:53 +08:00 committed by GitHub
commit 7a10881d30
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2,6 +2,8 @@ package cn.hutool.core.lang.intern;
import cn.hutool.core.map.WeakConcurrentMap;
import java.lang.ref.WeakReference;
/**
* 使用WeakHashMap(线程安全)存储对象的规范化对象注意此对象需单例使用<br>
*
@ -10,13 +12,16 @@ import cn.hutool.core.map.WeakConcurrentMap;
*/
public class WeakInterner<T> implements Interner<T>{
private final WeakConcurrentMap<T, T> cache = new WeakConcurrentMap<>();
private final WeakConcurrentMap<T, WeakReference<T>> cache = new WeakConcurrentMap<>();
@Override
public T intern(T sample) {
if(null == sample){
if (sample == null) {
return null;
}
return cache.computeIfAbsent(sample, (key)->sample);
T val;
do {
val = this.cache.computeIfAbsent(sample, WeakReference::new).get();
} while (val == null);
return val;
}
}