java - Apache POI 在多线程中的 tmp 目录上获取 java.io.IOException

标签 java multithreading apache apache-poi

我有一个 Java 应用程序,它收到创建 XLSX 文件的请求。
该应用程序是多线程的,这意味着 5 个用户可以同时运行报告。
我的问题是,当报告很大并且 5 个用户一起创建报告时,我收到此消息 java.io.IOException: Could not createtemporary directory ' 这可能是因为 5 个线程之一删除了 java.tmp.dir 而其他 4 个线程失败了。

我该如何解决这个问题?
我建议的解决方案之一是为每个线程提供不同的 java.io.tmpdir,这是可以做到的吗?

最佳答案

一种解决方案是在创建临时目录时,线程应该附加一些前缀来唯一标识。因此,不会对同一文件夹进行并发修改。

在实现时你必须考虑可以同时处理多少个请求。你不能创建很多目录。

如果请求数量超出您的处理能力,一种解决方案是使用线程池和队列来保存请求。

或者如果内容相似,那么您可以创建一个模板并动态更改一些数据。因此只有克隆才有效

关于java - Apache POI 在多线程中的 tmp 目录上获取 java.io.IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48048606/

相关文章:

Java Runnable 具有大量任务 Rainbow Table

java - 线程中出现异常 "Thread-***"java.lang.NullPointerException

mongodb - 错误 : while start Apache nutch with mongodb

java - 使用 GSON 将对象的 "list"(作为对象)解析为 JSON 中的整数对象( HashMap )

java - 空闲固定线程池的缺点

java - JsonSimple : How to get Second object in Json feed

java - 为什么在 web.xml 文件中隐藏 .jsp 扩展名时出现 404 错误?

c# - 无法启动带有 mod_mono 的 apache2。错误 : undefined symbol: unixd_config

java - Maven:以下 pom.xml 文件给出的空 jar 是什么?

java - 如何将八位字节字符串转换为可读字符串