(fix)(headless)Fix concurrent modification exception issue.

This commit is contained in:
jerryjzhang
2025-09-22 15:59:35 +08:00
parent 2d39ebf38b
commit 3dd53bad89
7 changed files with 21 additions and 18 deletions

View File

@@ -33,6 +33,7 @@ import java.util.Objects;
import java.util.PriorityQueue;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.PriorityBlockingQueue;
import static com.hankcs.hanlp.utility.Predefine.logger;
@@ -40,7 +41,7 @@ public class MultiCustomDictionary extends DynamicCustomDictionary {
public static int MAX_SIZE = 10;
public static Boolean removeDuplicates = true;
public static ConcurrentHashMap<String, PriorityQueue<Term>> NATURE_TO_VALUES =
public static ConcurrentHashMap<String, PriorityBlockingQueue<Term>> NATURE_TO_VALUES =
new ConcurrentHashMap<>();
private static boolean addToSuggesterTrie = true;
@@ -146,9 +147,10 @@ public class MultiCustomDictionary extends DynamicCustomDictionary {
}
for (int i = 0; i < attribute.nature.length; i++) {
Nature nature = attribute.nature[i];
PriorityQueue<Term> priorityQueue = NATURE_TO_VALUES.get(nature.toString());
PriorityBlockingQueue<Term> priorityQueue =
NATURE_TO_VALUES.get(nature.toString());
if (Objects.isNull(priorityQueue)) {
priorityQueue = new PriorityQueue<>(MAX_SIZE,
priorityQueue = new PriorityBlockingQueue<>(MAX_SIZE,
Comparator.comparingInt(Term::getFrequency).reversed());
NATURE_TO_VALUES.put(nature.toString(), priorityQueue);
}

View File

@@ -24,6 +24,7 @@ import java.util.PriorityQueue;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.stream.Collectors;
@Slf4j
@@ -200,7 +201,7 @@ public class SearchService {
public static List<String> getDimensionValue(DimensionValueReq dimensionValueReq) {
String nature = DictWordType.NATURE_SPILT + dimensionValueReq.getModelId()
+ DictWordType.NATURE_SPILT + dimensionValueReq.getElementID();
PriorityQueue<Term> terms = MultiCustomDictionary.NATURE_TO_VALUES.get(nature);
PriorityBlockingQueue<Term> terms = MultiCustomDictionary.NATURE_TO_VALUES.get(nature);
if (CollectionUtils.isEmpty(terms)) {
return new ArrayList<>();
}

View File

@@ -144,7 +144,8 @@ public class PromptHelper {
dimensionStr.append(" ALIAS '").append(alias).append("'");
}
if (Objects.nonNull(dimension.getExtInfo().get(DIMENSION_DATA_TYPE))) {
dimensionStr.append(" DATATYPE '").append(dimension.getExtInfo().get(DIMENSION_DATA_TYPE)).append("'");
dimensionStr.append(" DATATYPE '")
.append(dimension.getExtInfo().get(DIMENSION_DATA_TYPE)).append("'");
}
if (StringUtils.isNotEmpty(dimension.getTimeFormat())) {
dimensionStr.append(" FORMAT '").append(dimension.getTimeFormat()).append("'");