Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在UNIX中使用并行性生成大量PDF文件_Java_Unix_Jasper Reports - Fatal编程技术网

Java 在UNIX中使用并行性生成大量PDF文件

Java 在UNIX中使用并行性生成大量PDF文件,java,unix,jasper-reports,Java,Unix,Jasper Reports,因此,最终我需要在UNIX服务器上的磁盘上编写大量PDF(40000),我正试图找到一种有效的方法(更快/消耗更少的内存) 我一直在使用JasperReports创建一个模板,该模板作为参数接收报告所需的所有信息(这意味着报告不会进入数据库) 然后,我有一个简单的Java应用程序,它查询数据库并带来数据集,对于每个记录,它填充.jasper并将PDF写入磁盘 现在,这对于几百条记录来说效果很好,但我认为它不适用于生产,因为数量扩展到40000条记录,并且过程的输出将是相同数量的PDF文件。做一些

因此,最终我需要在UNIX服务器上的磁盘上编写大量PDF(40000),我正试图找到一种有效的方法(更快/消耗更少的内存)

我一直在使用JasperReports创建一个模板,该模板作为参数接收报告所需的所有信息(这意味着报告不会进入数据库)

然后,我有一个简单的Java应用程序,它查询数据库并带来数据集,对于每个记录,它填充.jasper并将PDF写入磁盘

现在,这对于几百条记录来说效果很好,但我认为它不适用于生产,因为数量扩展到40000条记录,并且过程的输出将是相同数量的PDF文件。做一些测试,我估计这个过程至少需要3个小时,我也开始担心内存消耗

因此,我想知道的是,是否有一种有效的方法可以做到这一点:

  • 我应该为此进程使用并行/多线程吗
  • 有人能给我介绍一下这种工作的Knoww模式/例子吗

感谢您的时间

不幸的是,您不能使用更少的内存并使用多线程来呈现不同的PDF,每个线程将分配内存来处理其PDF,内存使用量将与线程数成线性关系。 如果您可以使用多个线程处理相同的PDF(相同的数据),情况就完全不同了,但我认为这并不容易,因为线程需要频繁的同步,从而使多线程变得毫无意义

如果多线程不需要共享任何信息,那么实现多线程就很简单了,您只需实现接口,创建通过Runnable实现的新线程,然后等待它们结束


如果我是你,我会在那时只加载数据集的一部分,这可能会允许你使用多个线程。

你说的是“更快/更少的内存”。通常很难同时实现这两个目标。另外,请参见指南中的注释,多线程!=fasterYes这就是我最终要做的,但我没有亲自处理线程创建,而是使用了本文中描述的ExecutoService。感谢您的回答,我将研究Jasper Virtualizer如何处理大型数据集。