Java多线程并发操作数据库能否提高运行速度。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java多线程并发操作数据库能否提高运行速度。相关的知识,希望对你有一定的参考价值。

我做的这个项目,用dom4j将XML中包含的数据放入数据库中。因为数据量大(大约10w条数据)运行时间非常长。请问诸位大神,通过利用多线程并发读取的方式是不是可以加快运行速度啊?
我这样的一个方式速度限制的瓶颈在那个方面是硬盘的IO吗(如果是的话,貌似多线程改进就没有太大效果)?

PS: 我的电脑很也比较老,估计是运行较慢的一个原因。。。

优化建议:
1. 在你的代码里大点评测下 每个操作花的时间. 譬如 dom4j解析花了多久, 存储到数据库花了多久等等.
2. 评测哪些地方可以并行操作以提高CPU利用率;
3. 数据库操作部分也可以做适当优化, 譬如批量提交可以显著提高插入速度, 譬如去除索引/主键后插入等;
4. 不同机器的IO速度是不同的, 因此应该能提供运行时的任务调度参数化, 譬如多少个dom4j解析线程, 入库的批量数量等;
参考技术A 如果xml很大的话,建议用sax,如果只是10万数据的应该如DB不会很慢的。
可以通过打印日志来观察运行的时间,可以在某个地方打印下时间。

另外使用多线程的话肯定会提高运行效率,看你程序怎么设计啦。

如果不介意可以把你主要代码粘出来给你看看,特别是操作DB的代码

JAVA多线程到底能不能加快程序运行速度?

我写了一个文件转换的程序,大概实现功能是这样的:将doc,docx,xls,xlsx,ppt,pptx...等类型文件拖进某个文件夹A,程序自动将所有文件转换成txt格式文件,并存储到另一个文件夹B,然后删除文件夹A中文件。一次性拖入十几二十个文件的话,转换速度还是挺快的,基本上可以实现一拖进去,文件夹A就被清空了。但是如果是几百个文件的话,就需要一定的时间了。我测试了很多次,479个文件完成整个过程大概需要35秒,这太慢了,太让人难受了。然后我就用多线程,但是经测试,并没有加快速度,基本上有用多线程跟没用没什么两样,这让我怀疑多线程到底能不能加快程序运行速度?当然也有可能是我的多线程写错了。如果各位有多线程的代码,请贴出来参考参考,最好多线程的思想是:有两个运算模块,让多线程分配两个线程,每个线程负责运行一个运算模块,并且是同时运行

磁盘IO的速度在那里了,就算你再多的线程,也绕不过IO瓶颈。不是说多线程不能提高效率,这个要看你项目的性能瓶颈在哪里。 IO密集型,没必要多线程,容易弄巧成拙。建议Cache,某些文件系统在顺序读或写磁盘时速度相当快,如果恰好文件是顺序存储在磁盘上的,建议先尽量读进内存,再一次性写出去。其他什么磁盘内存通道之类的底层技术就不是Java能左右的了。 参考技术A 线程并不能提高速度,而是在执行某个耗时的功能时,在还可以做其它的事。多线程使你的程序在处理文件时不必显得已经卡死。
你可以试试这种方法,使用线程池,每个文件都是使用一个线程进行处理(我觉得你只是有了一个线程仍然进行的线性的处理。),最后使用消息handler 通知主线程工作完毕。

以上是关于Java多线程并发操作数据库能否提高运行速度。的主要内容,如果未能解决你的问题,请参考以下文章

java 多线程问题 真的提高了效率吗?

java中多线程地并发运行是啥意思?有啥作用.好处?

Java并发编程并发基础 —— 线程

JAVA-多线程-创建线程的三种方式

并发编程之多线程(Java)

Java并发编程从入门到精通 - 第3章:Thread安全