mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
fix bg
This commit is contained in:
parent
569877e0ef
commit
f9a3cf7b23
@ -18,6 +18,7 @@
|
|||||||
* 【poi 】 修复ExcelWriter.getDisposition方法生成错误(issue#2239@Github)
|
* 【poi 】 修复ExcelWriter.getDisposition方法生成错误(issue#2239@Github)
|
||||||
* 【core 】 修复UrlBuilder重复编码的问题(issue#2243@Github)
|
* 【core 】 修复UrlBuilder重复编码的问题(issue#2243@Github)
|
||||||
* 【http 】 修复HttpRequest中urlQuery,处理get请求参数的时候会导致空指针异常(pr#2248@Github)
|
* 【http 】 修复HttpRequest中urlQuery,处理get请求参数的时候会导致空指针异常(pr#2248@Github)
|
||||||
|
* 【core 】 修复SimpleCache在get时未使用读锁可能导致的问题
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ public class SimpleCache<K, V> implements Iterable<Map.Entry<K, V>>, Serializabl
|
|||||||
keyLock.lock();
|
keyLock.lock();
|
||||||
try {
|
try {
|
||||||
// 双重检查,防止在竞争锁的过程中已经有其它线程写入
|
// 双重检查,防止在竞争锁的过程中已经有其它线程写入
|
||||||
v = cache.get(key);
|
v = get(key);
|
||||||
if (null == v || (null != validPredicate && false == validPredicate.test(v))) {
|
if (null == v || (null != validPredicate && false == validPredicate.test(v))) {
|
||||||
try {
|
try {
|
||||||
v = supplier.call();
|
v = supplier.call();
|
||||||
|
@ -44,9 +44,9 @@ public class ReferenceUtil {
|
|||||||
public static <T> Reference<T> create(ReferenceType type, T referent, ReferenceQueue<T> queue) {
|
public static <T> Reference<T> create(ReferenceType type, T referent, ReferenceQueue<T> queue) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case SOFT:
|
case SOFT:
|
||||||
return new SoftReference<>(referent);
|
return new SoftReference<>(referent, queue);
|
||||||
case WEAK:
|
case WEAK:
|
||||||
return new WeakReference<>(referent);
|
return new WeakReference<>(referent, queue);
|
||||||
case PHANTOM:
|
case PHANTOM:
|
||||||
return new PhantomReference<>(referent, queue);
|
return new PhantomReference<>(referent, queue);
|
||||||
default:
|
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());
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user