mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
fix bg
This commit is contained in:
@@ -97,7 +97,7 @@ public class SimpleCache<K, V> implements Iterable<Map.Entry<K, V>>, Serializabl
|
||||
keyLock.lock();
|
||||
try {
|
||||
// 双重检查,防止在竞争锁的过程中已经有其它线程写入
|
||||
v = cache.get(key);
|
||||
v = get(key);
|
||||
if (null == v || (null != validPredicate && false == validPredicate.test(v))) {
|
||||
try {
|
||||
v = supplier.call();
|
||||
|
@@ -44,9 +44,9 @@ public class ReferenceUtil {
|
||||
public static <T> Reference<T> create(ReferenceType type, T referent, ReferenceQueue<T> queue) {
|
||||
switch (type) {
|
||||
case SOFT:
|
||||
return new SoftReference<>(referent);
|
||||
return new SoftReference<>(referent, queue);
|
||||
case WEAK:
|
||||
return new WeakReference<>(referent);
|
||||
return new WeakReference<>(referent, queue);
|
||||
case PHANTOM:
|
||||
return new PhantomReference<>(referent, queue);
|
||||
default:
|
||||
|
34
hutool-core/src/test/java/cn/hutool/core/util/ReferenceUtilTest.java
Executable file
34
hutool-core/src/test/java/cn/hutool/core/util/ReferenceUtilTest.java
Executable file
@@ -0,0 +1,34 @@
|
||||
package cn.hutool.core.util;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.lang.ref.PhantomReference;
|
||||
import java.lang.ref.Reference;
|
||||
import java.lang.ref.SoftReference;
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
public class ReferenceUtilTest {
|
||||
|
||||
@Test
|
||||
public void createWeakTest(){
|
||||
final Reference<Integer> integerReference = ReferenceUtil.create(ReferenceUtil.ReferenceType.WEAK, 1);
|
||||
Assert.assertTrue(integerReference instanceof WeakReference);
|
||||
Assert.assertEquals(new Integer(1), integerReference.get());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createSoftTest(){
|
||||
final Reference<Integer> integerReference = ReferenceUtil.create(ReferenceUtil.ReferenceType.SOFT, 1);
|
||||
Assert.assertTrue(integerReference instanceof SoftReference);
|
||||
Assert.assertEquals(new Integer(1), integerReference.get());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createPhantomTest(){
|
||||
final Reference<Integer> integerReference = ReferenceUtil.create(ReferenceUtil.ReferenceType.PHANTOM, 1);
|
||||
Assert.assertTrue(integerReference instanceof PhantomReference);
|
||||
// get方法永远都返回null,PhantomReference只能用来监控对象的GC状况
|
||||
Assert.assertNull(integerReference.get());
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user