From 6dfb495278189cc08746aeef4c80a87aa0fdc373 Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 19 Dec 2023 22:04:31 +0800 Subject: [PATCH] fix code --- .../hutool/core/lang/SingletonTest.java | 21 +++++++++++++++++ .../java/org/dromara/hutool/db/ds/DSPool.java | 7 ++---- .../pinyin/engine/houbb/HoubbEngine.java | 6 ++--- .../pinyin/engine/jpinyin/JPinyinEngine.java | 23 +++++++++++++++---- .../engine/pinyin4j/Pinyin4jEngine.java | 2 +- .../engine/tinypinyin/TinyPinyinEngine.java | 7 +++--- 6 files changed, 48 insertions(+), 18 deletions(-) diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/lang/SingletonTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/lang/SingletonTest.java index 84060933e..bdbb92410 100644 --- a/hutool-core/src/test/java/org/dromara/hutool/core/lang/SingletonTest.java +++ b/hutool-core/src/test/java/org/dromara/hutool/core/lang/SingletonTest.java @@ -16,9 +16,13 @@ import org.dromara.hutool.core.exception.HutoolException; import org.dromara.hutool.core.thread.ThreadUtil; import lombok.Data; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import java.time.Duration; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; public class SingletonTest { @@ -65,4 +69,21 @@ public class SingletonTest { static class C{ private B b = Singleton.get(B.class); } + + @Test + @Disabled + void issue3435Test() { + final String key = "123"; + final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 10, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue()); + for (int i = 0; i < 100; i++) { + threadPoolExecutor.execute(() -> { + Singleton.get(key, () -> { + System.out.println(key); + return "123"; + }); + }); + } + + ThreadUtil.sleep(5000); + } } diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/ds/DSPool.java b/hutool-db/src/main/java/org/dromara/hutool/db/ds/DSPool.java index 40debc2bd..20cc1aa0b 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/ds/DSPool.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/ds/DSPool.java @@ -13,6 +13,7 @@ package org.dromara.hutool.db.ds; import org.dromara.hutool.core.io.IoUtil; +import org.dromara.hutool.core.lang.Singleton; import org.dromara.hutool.core.map.MapUtil; import org.dromara.hutool.core.map.SafeConcurrentHashMap; import org.dromara.hutool.core.spi.SpiUtil; @@ -42,17 +43,13 @@ public class DSPool implements Closeable { private static final String CONNECTION_PREFIX = "connection."; - private static class SingletonHolder { - private static final DSPool INSTANCE = new DSPool(); - } - /** * 获取单例池对象 * * @return 数据源池 */ public static DSPool getInstance() { - return SingletonHolder.INSTANCE; + return Singleton.get(DSPool.class.getName(), DSPool::new); } /** diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/houbb/HoubbEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/houbb/HoubbEngine.java index 70e36ae8d..0b29dabda 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/houbb/HoubbEngine.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/houbb/HoubbEngine.java @@ -37,10 +37,8 @@ import com.github.houbb.pinyin.util.PinyinHelper; */ public class HoubbEngine implements PinyinEngine { - /** - * 汉字拼音输出的格式 - */ - PinyinStyleEnum format; + // 汉字拼音输出的格式 + private PinyinStyleEnum format; /** * 构造 diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/jpinyin/JPinyinEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/jpinyin/JPinyinEngine.java index 822e5b3de..7a8cd3572 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/jpinyin/JPinyinEngine.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/jpinyin/JPinyinEngine.java @@ -40,18 +40,31 @@ import com.github.stuxuhai.jpinyin.PinyinHelper; public class JPinyinEngine implements PinyinEngine { //设置汉子拼音输出的格式 - PinyinFormat format; + private PinyinFormat format; - public JPinyinEngine(){ + /** + * 构造 + */ + public JPinyinEngine() { this(null); } - public JPinyinEngine(final PinyinFormat format){ + /** + * 构造 + * + * @param format {@link PinyinFormat} + */ + public JPinyinEngine(final PinyinFormat format) { init(format); } - public void init(PinyinFormat format){ - if(null == format){ + /** + * 初始化格式 + * + * @param format 格式{@link PinyinFormat} + */ + public void init(PinyinFormat format) { + if (null == format) { // 不加声调 format = PinyinFormat.WITHOUT_TONE; } diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/pinyin4j/Pinyin4jEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/pinyin4j/Pinyin4jEngine.java index 12d71021a..ecb445a26 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/pinyin4j/Pinyin4jEngine.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/pinyin4j/Pinyin4jEngine.java @@ -44,7 +44,7 @@ import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombi public class Pinyin4jEngine implements PinyinEngine { //设置汉子拼音输出的格式 - HanyuPinyinOutputFormat format; + private HanyuPinyinOutputFormat format; /** * 构造 diff --git a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/tinypinyin/TinyPinyinEngine.java b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/tinypinyin/TinyPinyinEngine.java index 8a89f539c..5621284bd 100644 --- a/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/tinypinyin/TinyPinyinEngine.java +++ b/hutool-extra/src/main/java/org/dromara/hutool/extra/pinyin/engine/tinypinyin/TinyPinyinEngine.java @@ -41,21 +41,22 @@ public class TinyPinyinEngine implements PinyinEngine { /** * 构造 */ - public TinyPinyinEngine(){ + public TinyPinyinEngine() { this(null); } /** * 构造 + * * @param config 配置 */ - public TinyPinyinEngine(final Pinyin.Config config){ + public TinyPinyinEngine(final Pinyin.Config config) { Pinyin.init(config); } @Override public String getPinyin(final char c) { - if(!Pinyin.isChinese(c)){ + if (!Pinyin.isChinese(c)) { return String.valueOf(c); } return Pinyin.toPinyin(c).toLowerCase();