记一次多线程安全问题

背景:由于数据库查询瓶颈,count太慢,于是拆分时间进行count,然后再累加count得出最终总数;但由于单线程轮询时间区间,再累加,用时间太长,造成慢接口,因此采用同步多线程,分段累加方法。

同步工具类:countdownlatch

异步线程城池:@Async

由于方法传入了公共变量,并作为查询db参数,此外还有list作为存储线程处理结果。所以这里埋下了两个线程安全隐患,就是放多个线程处理时,存在数据混乱存储问题

解决方案:在方法上加上方法锁,也就是synchronize,但这种处理方法,一定程度降低了并发效率

方案二:只锁住共享产量,减少锁粒度

方案三:无锁,也是最理想效果,将全局变量转化成局部变量

你可能感兴趣的:(记一次多线程安全问题)