java启动多个线程执行同一个任务,效率会提高吗?

现有一个任务是这样的,数据库里有一个百万级别的数据需要处理,处理方式是需要一条数据一条数据的读出来,然后对价格进行结算,可以理解为每条数据都需要执行个方法进行处理。如何使... 现有一个任务是这样的,数据库里有一个百万级别的数据需要处理,处理方式是需要一条数据一条数据的读出来,然后对价格进行结算,可以理解为每条数据都需要执行个方法进行处理。如何使用多线程,可以让多个线程共同处理这堆数据,而不至于重复处理同一条?类似于挖山开隧道,如何使一个线程从正序开始处理,另一个线程从数据尾部倒序开始处理? 展开
 我来答
匿名用户
2017-10-12
展开全部
不清楚你用的什么数据库,以mysql做假设,首先确定你的表数据条数,假设row=100W,然后你打算开多少条线程,比如threadCount=20;那么平均分配下来每条线程该处理的条数为avg=100W/20=5W,到这里你就得理解每条线程处理的是表中的那一批数据,比如你的查询是按id字段排序的,那么线程1就是处理1-50000条,线程2就是处理50001-100000,依次类推下去,从这看你可以得到线程n(从1开始计算,表示第几条线程)的一个变量值,offset=(n-1)*50000+1,到此,需要知道的数据都有了:表数据条数 row,线程条数threadCount,每条线程处理的条数avg,每条线程从第几条数据开始处理offset,那么你就可以在每条线程中使用select * from table limit offset,1000这样的语句去一次性查询一批数据来在代码里循环处理,我定的是一次性查1000条,所以在线程没处理完5W条之前,offset每次查询完1000后,offset得加上1000,然后继续select,直到处理完5W条数据
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式