【问题标题】:Ghost4J native library to convert pdf to imageGhost4J 本机库将 pdf 转换为图像
【发布时间】:2013-07-14 11:50:49
【问题描述】:
我正在使用 Ghost4J 本机库 32 位和 64 位 dll 文件将我的 PDF 转换为图像。我需要将它与 ThreadPoolExecutor (即多线程)一起使用,但由于它是原生的,它经常让我的 JBoss 崩溃。
在我同步使用这个库后,线程表现不佳。即有 4 个线程和 8 个线程,在性能上没有区别。
有什么安全的方法吗?
【问题讨论】:
标签:
java
image
pdf
ghostscript
native-code
【解决方案1】:
你有没有尝试过 ghost4j 推荐的多线程:
多线程
确保 Ghostscript 是线程安全的是第一步。但是如果 Ghost4J 被用于多线程/多用户环境(例如在 webapp 中)呢?
如果使用 Ghost4J 编写文档转换 webapp,如果用户必须等待先前的用户请求完成,那么使用单个 Ghostscript 解释器可能是一个真正的问题。
为了克服这个限制,Ghost4J 在其高级 API 组件上提供了多线程支持(从 0.4.0 版开始)。
这怎么可能? : 组件处理发生在不同的 JVM 中。
主 JVM 中的组件能够启动其他 JVM(在其他系统进程中运行)并使用 cajo 库(嵌入在 ghost4j JAR 文件中)控制它们。
为了确保可以从主 JVM 创建从属 JVM,请检查是否可以使用 java 命令从命令行启动 Java。
可以通过在组件上设置 maxProcessCount 属性(如果可用)来控制多线程行为:
以下是如何设置 PDFConverter 组件以允许使用 2 个从属 JVM 进行多线程:
//create converter
PDFConverter converter = new PDFConverter();
//set multi-threading
converter.setMaxProcessCount(2);
(ghost4j - Thread safety and multi-threading)