java.util.ConcurrentModificationException 并发修改异常
说实话这个错误我是第一次见,但是我大致知道报错的原因是什么,就是并发高的情况下,多个线程争抢一个资源导致的.
分析: 我项目中用的是线程池方式处理实时数据,其实并发量根本不会太高,只是基本上没秒都会有数据处理,且也有存入其他String类型的值,但是却没有问题,唯独存这个map报错,但是看redis中的数据还是对的!!
解决办法
1 既然报并发修改异常,那么我将redis存入map类型的这块代码的整体方法上加上了@sync... 关键字,查看控制台,果然不报错了,但是这个很影响性能啊,不能这么搞.
2 看项目中,是spring集成的redis,有两种引入的redis操作,一种是Stringredistemplet另一种是 RedisTemplete,这两种templete的序列化方式不一样:
Stringredistemplet 序列化后为可读的数据
RedisTemplete 则是序列化了为不可读的字节数据
而且 Stringredistemplet 继承了 RedisTemplete ,比 RedisTemplete 要强大
两者存的数据相互不同,
1)RedisTemplate不能取StringRedisTemplate存入的数据。
2)StringRedisTemplate不能取RedisTemplate存入的数据 。
相同点: 操作方法基本相同
3 将map换为线程安全的map ConcurrentHashMap
于是: 我将项目中原来的 RedisTemplete 换成了 Stringredistemplet ,再看控制台,已经不报错了,具体原因,不得而知.
===============================数据不互通的验证=====================