请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师,问您一个多线程更新数据的问题

多线程更新数据的问题,就是一个线程池中我要更新280W的数据,这个线程池固定是 10个线程,

然后每次一个线程执行 更新 500条数据, 那280W / 500 = 5600,然后 for循环5600次,

每次线程池提交一个线程任务,就是上面说的更新500条数据,然后现在存在的问题是由于多线程的环境,

多个线程可能在更新重复的数据,导致最后可能出现少更新了一些数据,按照正常理想的情况下,应该是第一个线程

更新500条数据,第二线程继续更新后面500条数据,以此类推,这样就不会出现漏更新的问题,但是这样不就是

等于排队了,那么用多线程就没意义了,老师有什么方案嘛

正在回答

1回答

这个场景通常是要给每个线程分配不同的任务,任务一开始就是带序号的,比如线程1更新1-500,线程2更新501-1000,这样就不会造成重复。

0 回复 有任何疑惑可以回复我~
  • 提问者 奶茶三兄弟d #1
    老师,可是在线程池里面线程没办法确定啊,多线程执行更新500条数据,这种并发的情况下,感觉肯定会有重复执行的情况,能否在最外层加一个while循环,里面有重复的话,那下次select查询数据的时候,肯定还会有,然后再次把这批放在线程池中去让10个线程执行,直到外层 select的时候查不到相关条件的数据,代表都更新成功了,
    
    老师我意思就是,while循环下,select查询的时候需要在单线程(就是当前主线程中执行),查询到一批数据,放在线程池中 让多个线程去并发执行更新,因为发现如果将select放在多线程的情况下去查询,肯定有问题,每次查询的数据都不准确(肯定是少了)
    回复 有任何疑惑可以回复我~ 2020-11-13 10:13:53
  • 悟空 回复 提问者 奶茶三兄弟d #2
    对,一般都是select单线程,执行任务用多线程。
    回复 有任何疑惑可以回复我~ 2020-11-13 16:02:06
  • 提问者 奶茶三兄弟d 回复 悟空 #3
    好的,谢谢老师
    回复 有任何疑惑可以回复我~ 2020-11-13 18:28:51
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信