This commit is contained in:
Looly 2023-12-19 22:04:31 +08:00
parent 494c70b9e6
commit 6dfb495278
6 changed files with 48 additions and 18 deletions

View File

@ -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<Runnable>());
for (int i = 0; i < 100; i++) {
threadPoolExecutor.execute(() -> {
Singleton.get(key, () -> {
System.out.println(key);
return "123";
});
});
}
ThreadUtil.sleep(5000);
}
}

View File

@ -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);
}
/**

View File

@ -37,10 +37,8 @@ import com.github.houbb.pinyin.util.PinyinHelper;
*/
public class HoubbEngine implements PinyinEngine {
/**
* 汉字拼音输出的格式
*/
PinyinStyleEnum format;
// 汉字拼音输出的格式
private PinyinStyleEnum format;
/**
* 构造

View File

@ -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;
}

View File

@ -44,7 +44,7 @@ import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombi
public class Pinyin4jEngine implements PinyinEngine {
//设置汉子拼音输出的格式
HanyuPinyinOutputFormat format;
private HanyuPinyinOutputFormat format;
/**
* 构造

View File

@ -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();