标签:multithreading concurrency thread-safety docx4j java
我编写了一个应用程序,该应用程序必须从数千个大型docx文件中解析和检索一些数据.它将在具有许多CPU,大量RAM和RAID阵列中快速SSD的高性能生产服务器上运行,因此显然我想充分利用所有可用的性能.
我发现我的应用程序可以在许多并发线程中成功完成任何其他工作,但是无法使用docx4j库并发地解析许多docx文件.而且,该库不能安全地在多个单独的线程中支持多个WordprocessingMLPackage类实例,该实例包含docx文件中的数据.
谷歌搜索和检查该库的源代码可以确认它完全不是线程安全的(例如,其类包含许多不能同时使用的静态字段和实例).
所以我有一些问题要问:
>是否有其他具有相同功能且可以保证线程安全的库?
>是否可以在某些单独的进程中启动我的工作程序,而不是在单独的线程中启动我的工作程序,以解决此问题?如果是这样,它将严重降低我的应用程序的性能吗?
解决方法:
我不知道替代的线程安全库.
在单独的进程中启动工作程序是一种可行的解决方法-与使用单独的线程相比,启动成本会更高,但是如果要处理大量文件,这可能并不重要.您需要某种方式来使流程进行通信,一种选择是使用Redis-使用SETNX原子地将一个文件名添加到键值存储中,如果设置成功,则工作程序可以处理该文件,并且如果设置失败,则该文件已经在执行另一个进程.另一种选择是让管理器进程通过套接字将文件分配给工作进程.
标签:multithreading,concurrency,thread-safety,docx4j,java 来源: https://codeday.me/bug/20191030/1970768.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。