gpt4 book ai didi

java - 多线程适合这种情况吗?

转载 作者:太空宇宙 更新时间:2023-11-04 11:48:55 24 4
gpt4 key购买 nike

问题描述:

我们的任务是编写一个 Java 程序,该程序连接到数据库、执行 SQL 查询、迭代包含数百万条记录的 JDBC 结果集并将数据写入平面文件。

建议的解决方案:

我想到设计一个基于Java多线程的解决方案。

线程 1: 我将有一个线程,其唯一任务是迭代结果集、获取每条记录、为每条记录创建一个 DTO 对象,然后将该 DTO 对象放入 java.util.concurrent.ConcurrentLinkedQueue 中。

线程 2:该线程仅从队列中提取每个 DTO 对象并将其写入平面文件。

约束:除了 Java 之外我们不应该使用其他 API

您认为这种方法需要改进吗?或者是否有比这更好的方法,可以提高性能,从而将数百万条记录导出到文件所需的时间非常少?

感谢您的宝贵时间。

最佳答案

我同意第一个线程的任务是迭代结果集并获取数据。

我同意单线程执行平面写入,因为多线程无法优化对磁盘的访问。

但我会使用一组行的线程来准备准备写入平面文件的状态。
这个想法是有一个结构,其中包含一组要写入的字节数组、执行写入的顺序以及执行写入的线程要消耗的下一个数据。
您将拥有此结构的一个实例,该实例将在将数据准备为字节的线程和执行文件写入的线程之间共享。

因此,我们的想法是让一些线程准备一组行(1000、10 000、100 000...您应该进行一些测试来调整最佳值),这些线程执行任务的成本足够高,以至于有兴趣使用线程来完成此任务。
当然,在启动任务期间启动的线程数不得超过机器可用线程数。
否则,在文件中执行写入操作的线程可能会有一些不活动期。这是不可取的。

此解决方案的优点是,在平面文件中执行写入操作的线程不再消耗时间将 dto 属性转换为良好的字符串格式,只需在输出流中写入字节即可。

关于java - 多线程适合这种情况吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42051587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com