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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache POI在多线程中的tmp目录上获取java.io.IOException相关的知识,希望对你有一定的参考价值。

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

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

答案

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

在实现时,您必须考虑可以同时处理多少请求。您无法创建大量目录。

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

或者如果内容有相似之处,那么你可以创建一个模板并动态地改变一些数据。所以只有克隆才能工作

另一答案

我可能首先检查您的方法,与写入.xlsx文件有关,是否是线程安全的。并且您的theads可能会竞争同时写入相同的文件。

以上是关于Apache POI在多线程中的tmp目录上获取java.io.IOException的主要内容,如果未能解决你的问题,请参考以下文章

在多线程环境中的 SQL Server 中插入后获取 ID?

POI 多线程多sheet导出数据

iPhone:在多线程环境中发布 UIViewController 时出现问题

使用javafx和apache POI在项目中使用项目获取错误

java用poi读取excel文件时怎么获取每个单元格的列宽?

在多机器上远程执行JMeter