定时任务,任务重复问题

来源:5-15 插队演示1

林就远

2020-11-23

老师,您好。
我想请教您个问题,我在项目里设置了一个10个线程的线程池,然后做定时任务。
任务内容:查询数据库某张表状态值为0的记录数,将状态值改为1。
我现在的做法是:启动线程池,每5分钟执行一次任务,但是如果线程1一下执行5w条任务,在这5分钟只执行了2w条,还有3w条的数据没有处理完,但是这个时候线程2已经进来了,由于线程1还有3万条的记录没有更新状态值,线程2查询数据库的时候就能查询到这三万条数据,并做出和线程1相同的处理。
虽然对数据库的记录处理不会改变,但是这里多了3w次多余操作,降低了性能,也对数据库造成额外的压力。想问下有没有啥优秀的解决办法。
望回复,谢谢!!!

写回答

2回答

悟空

2020-11-23

QQ群内已回复

1
0

慕圣2057723

2021-02-10

你好,请问下解决方案是啥呢,加个字段表示处理中,每次只查询未处理的数据?

1
1
林就远
用forkjoinpool,配合countdown使用,然后用while循环使用,而不是定时的方法。(用主线程查出待处理任务,将任务丢给forkjoinpool池,用countdown控制任务是否完成,完成之后主线程继续去查询待处理任务)
2021-02-13
共1条回复

深度解密Java并发工具,精通JUC,成为并发多面手

JUC全方位讲解,构建并发工具类知识体系

1599 学习 · 573 问题

查看课程