记录一个多线程操作ArrayList引发的数组溢出异常
背景我用线程池提交任务去处理,我传的是AyyayList进去,在任务方法里面add到这个集合里面.
引发了ava.lang.ArrayIndexOutOfBoundsException:49这个异常,而且这个异常是一会有一会儿没有.不好定位.
解决方案: 将ArrayList换成CopyOnWriteArrayList,至于为什么大家可以去搜索一下ArrayList多线程调用add()可能出现的问题可解决方案.有很多大佬讲得很清楚,就是数组扩容引起得问题.
CopyOnWriteArrayList<LazadaBoxItemVO.RecommendCategory> recommendCategoryList = new CopyOnWriteArrayList<>();
if (CollectionUtils.isNotEmpty(noSetSites)) {
for (String site : noSetSites) {
poolTaskExecutor.submit(() -> lazadaGetSkuImageTask.setSiteCategory(site, recommendCategoryList, vo,latch));
}