Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 Docx4j库不是线程安全的。解决此问题的可能方法有哪些?_Java_Multithreading_Concurrency_Thread Safety_Docx4j - Fatal编程技术网

Java Docx4j库不是线程安全的。解决此问题的可能方法有哪些?

Java Docx4j库不是线程安全的。解决此问题的可能方法有哪些?,java,multithreading,concurrency,thread-safety,docx4j,Java,Multithreading,Concurrency,Thread Safety,Docx4j,我已经编写了一个应用程序,它必须从几千个大型docx文件中解析和检索一些数据。它将在一台高性能生产服务器上运行,该服务器具有许多CPU、大量RAM和RAID阵列中的快速SSD,因此我显然希望充分利用所有可用的性能功能 我发现我的应用程序在许多并发线程中成功地完成了任何其他工作,但它无法使用docx4j库并发解析许多docx文件。此外,该库不能在多个单独的线程中安全地支持多个WordprocessingMLPackage类实例,该类包含docx文件中的数据 通过谷歌搜索和检查库的源代码可以确认它完

我已经编写了一个应用程序,它必须从几千个大型docx文件中解析和检索一些数据。它将在一台高性能生产服务器上运行,该服务器具有许多CPU、大量RAM和RAID阵列中的快速SSD,因此我显然希望充分利用所有可用的性能功能

我发现我的应用程序在许多并发线程中成功地完成了任何其他工作,但它无法使用docx4j库并发解析许多docx文件。此外,该库不能在多个单独的线程中安全地支持多个WordprocessingMLPackage类实例,该类包含docx文件中的数据

通过谷歌搜索和检查库的源代码可以确认它完全不是线程安全的(例如,它的类包含许多不能同时使用的静态字段和实例)

所以我有一些问题要问:

  • 是否有其他具有相同功能的库保证线程安全
  • 我可以在一些单独的进程而不是单独的线程中启动我的工作线程来解决这个问题吗?如果是这样,它会严重降低我的应用程序的性能吗

我不知道还有其他线程安全库


在单独的进程中启动workers是一种可行的解决方法-启动成本比使用单独的线程要高,但如果要处理大量文件,这可能并不重要。您需要某种方式让进程通信,一个选项是使用-use以原子方式将文件名添加到键值存储,如果设置成功,则工作进程可以处理该文件,如果设置失败,则另一个进程已经在处理该文件。另一种选择是让manager进程通过套接字将文件分配给辅助进程。

目标是线程安全。任何问题都将得到解决。你有什么特别的问题吗?可以通过利用类加载器创建库的多个“实例”(每个实例都有自己独立的静态字段)吗?我不是CL专家,但听起来feasible@JasonPlutext我有一些问题,但我已经找到了解决方案。请更全面地描述您的问题和解决方案,以利于找到此线程的任何人。谢谢你。谢谢你给Redis的链接,它对我很有用。