我是靠谱客的博主 曾经芝麻,最近开发中收集的这篇文章主要介绍Spring Service中遍历map出现了ConcurrentModificationException,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

手底下小朋友在测试环境写了如下的代码一个spring的service里面进行排序,但是总有异常java.util.ConcurrentModificationException,这个异常很明显就是一个变量正在被遍历的时候被修改了,出现这个问题的主要原因是什么呢?? 出现在for循环中吗??

其实这个问题最主要的原因是:Spring的@Service默认是一个单例模式,所以每个请求访问的时候,访问的都是一个tagScoreMap,所以就会出现一个线程正在for循环遍历map另一个线程执行了初始化map的操作。

@Service
public class RankService {

    private Map<String, Float> tagScoreMap;
	public List<SearchGameInfo> rank(Map<RecallType, Set<SearchGameInfo>> searchGameInfoMap, RichQuery richQuery) {
            tagScoreMap = new HashMap<>();
            for (Map.Entry<String, Float> entry : tagScoreMap.entrySet()) {
                Float value = entry.getValue();
                float score = MathUtils.scoreNormalization(value, maxTagQualityScore, minTagQualityScore);
                entry.setValue(score);
            }
        
}

最后

以上就是曾经芝麻为你收集整理的Spring Service中遍历map出现了ConcurrentModificationException的全部内容,希望文章能够帮你解决Spring Service中遍历map出现了ConcurrentModificationException所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部