线程池中线程抢占导致数据问题

在使用线程池解决定时任务中批量数据的处理时,出现问题。

 

在写多线程处理对象的时候,通过传入的对象进行查询,但是因为多线程在线程池进行,会出现对象抢占问题,当线程1在处理数据的时候,线程2也开始数据处理,此时线程就会把该对象的某些值进行变化,线程1还没结束运行,此时对象的值出现了问题,导致后续的操作数据出现问题。

检测方法:通过日志查看,在每个循环里的最后打印出该对象的特殊值,如代码所示的mssSubProjectCode,在后台日志查看,若线程1在执行sql的时候显示的参数mssSubProjectCode(001),在线程1处理第二天sql时mssSubProjectCode变成(002),且线程2显示开启了,线程1还没结束,证明发生了抢占问题。

解决方法:

1.数据量不是很多时,可以选择单线程处理。

2.或者使用线程池的时候,对该对象重新建对象赋值,让每个线程都有独立的对象。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值