我需要您的帮助,以便及时改进下面的Java过程。程序步骤如下:
过程结束后,所有记录已被处理。
这个执行需要超过12个小时在一个正常的PC上完成。我想知道如何改进这段代码以更快地导出文件。也许用线程?
谢谢
发布于 2015-11-17 08:43:36
我取“fromRange”到“toRange”之间的记录
和
我取“fromRange”到“toRange”之间的记录
是IO步骤,阻止计算。多线程是确保您的机器资源得到最佳使用的解决方案。
当然,您应该自己分析这一点,并看到线程在很多时候被阻塞。如果是,是的,多线程是有效的。
发布于 2015-11-17 08:49:01
评论:
这是可以的,因为它是主键,它有一个自动索引的数据库管理系统。
您可以通过DMBS函数的第一行和最后一行来实现这一点。这是非常有选择性的,不需要太长时间
大多数现代DMBS都可以将它们的索引保存为B*树。这意味着你有一个树结构,它在找到一个值时非常快,然后树叶通过一个链表链接起来,这样就可以快速地找到愤怒。因此,这也应该是选择性的,不要花费太多的时间。
我会尝试创建一个Java对象,最后通过JAXB进行序列化。
通常,您需要做一些跟踪,以查看哪一步消耗了大部分时间。
发布于 2015-11-17 08:49:55
同时做所有的工作肯定会更好。保持主线程从数据库中读取,但读取所有记录,即select * from MyTable order by myId。
然后通过调用Executors工厂(如newCachedThreadPool )中的一个方法来创建newCachedThreadPool。
然后,在主线程中,继续遍历记录,并为每个记录发送executor.submit(new Runnable() { doYourWork(record); }, null);。注意,record必须是一个副本,因为它将从不同的线程被访问!
最后打电话给executor.shutdown()和executor.awaitTermination()。您可以通过对get()方法返回的Future调用Future来检查潜在的错误。
如果您想要更高级的解决方案,可以考虑为此使用Apache,特别是SQL示例。
https://stackoverflow.com/questions/33752396
复制相似问题