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

现有一个任务是这样的,数据库里有一个百万级别的数据需要处理,处理方式是需要一条数据一条数据的读出来,然后对价格进行结算,可以理解为每条数据都需要执行个方法进行处理。如何使用多线程,可以让多个线程共同处理这堆数据,而不至于重复处理同一条?类似于挖山开隧道,如何使一个线程从正序开始处理,另一个线程从数据尾部倒序开始处理?

不清楚你用的什么数据库,以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条数据
温馨提示:内容为网友见解,仅供参考
无其他回答

如何深刻理解Java多线程?
答案当然不是的。多线程还是有存在的价值的,我们在写输入流输出流,写网络程序等等的时候,都会出现阻塞的情况,如果说,我们不使用多线程的话,从A中读数据出来的时候,A因为没有准备好,而整个程序阻塞了,其他的任何事情都没法进行。如果采用多线程的话,你就不用担心这个问题了。还举个例子:游戏...

多线程在任何情况下均能提高效率吗?
您或许会认为,可以使用双检查加锁优化惯用法来减小加锁开销,事实上这种惯用法确实可以大幅度提高加锁效率,但双检查加锁优化并不能100%地用于所有的编译系统,至少我知道在Java编译系统中可能会出现问题(比如编译系统的优化选项使得用作标记的类级静态变量被优化,导致第一次检查失败)。 其次就是线程...

在JAVA中线程到底起到什么作用
至少一个线程修改共享资源,这样的情况下,线程之间就需要同步。 关于线程同步,需要牢牢记住的第四点是:多个线程访问共享资源的代码有可能是同一份代码,也有可能是不同的代码;无论是否执行同一份代码,只要这些线程的代码访问同一份可变的共享资源,这些线程之间就需要同步。为了加深理解,下面举几个例子。 有两个采购员,...

一个文件能同时被多个java线程读取吗
可以。但是由于机械磁盘只能同时一个线程访问,所以多线程的读取效率可能还不如单线程。

Java 多线程和单线程效率比较,最好是能上代码,我使用了多线程发现耗时更...
单线程比多线程更快。你的测试代码只是用了CPU资源。因为多线程需要处理线程的开销,开销多了自然没有单线程快。多线程是为了更充分的利用计算机的资源。比如网络,IO,CPU...如果你在for循环里加入一个磁盘写入操作,多线程就会比单线程快了

Java 批量更新太慢?多线程+List 分段完美解决!
如ConcurrentHashMap、ConcurrentLinkedQueue等)来实现线程安全。总结来说,通过合理利用多线程和精心设计的数据分段策略,可以有效提升Java批量更新操作的执行效率,解决数据处理中的性能瓶颈。实现这一优化过程不仅能够提高项目开发效率,还能提升用户体验,是Java开发者在处理大数据量操作时不可忽视的重要技能。

多线程真的比单线程执行效率高吗
速度快8倍左右;这样的场合有个特点,速度或者说效率的关键不是java的处理能力,而是接口限制成了瓶颈;举个反例,如果对一个集合进行遍历,打印value,使用多线程明显比单线程效率低;因为时间过多的消耗在了创建线程,销毁线程上,执行的有用代码和单线程没区别,效率不如单线程;

Java多线程批量操作,居然有人不做事务控制?
在同事的建议下,我们尝试使用事务集合来控制多线程事务提交,虽然这种方式同样依赖于线程执行完毕后提交事务,可能会占用Jdbc连接池,但在合理控制线程数量的情况下,能有效提升批量操作的效率。最后,我们发现某些数据库环境下,尽管不支持批量update,但支持插入多条数据。通过将需要更新的数据拼接成多条...

...的运行速度?有什么利弊?C#或java中创建了多线程,如何使用?
所以 单线程程序,如果涉及这些慢操作,那么大部分时间CPU都在等待硬盘操作之类,多线程操作,可以让多个任务并行执行,a任务等待硬盘响应时,让b任务去用cpu,所以,多线程不能提高单任务的运行速度,但是可以提高多个可以并发的任务速度。举个简单的例子,烧开水的等待时间,你可以去准备茶叶,洗杯子等等 ...

java开两个线程操作同一个对象会有什么情况?
那么它们必须等待先来的完成,打印程序只能有一个,线程上锁了 有一段服务器代码,有两个甚至多个网页去请求他,他会给每一个线程创建一个一样的对象去处理事物,而不用等待别人操作完 你说的两个线程去操作一个对象,那应该是操作共享资源,只要没有内存溢出等等异常是完全可以正常执行的 ...

相似回答