2012-01-24 67 views
0

可以在多线程环境中写入相同的工作簿(HSSFWorkbook)吗?
工作簿存储在由线程共享的线程安全集合中。
每个线程在不同的工作表上工作。POI工作簿多线程

+0

POI文档是否直接说图书馆是线程安全的? (即有意实施)。如果不是,假设它不是。 – millimoose

回答

0

是的,你可以在多线程环境下写入相同的工作簿。但是,如果你已经使其线程安全,那么一次只有一个线程可以访问它。

+0

我不明白,我想用一个工作簿,所有的线程都会得到这个线程的引用并写入新的工作表 – omrid

+1

@omrid你能显示一些代码吗?你到现在为止尝试过什么?可能那时我们将能够帮助你。 – gprathour

+0

我不确定你可以有多个线程写入*相同*工作簿,当然不是所有情况。多个线程写入自己的工作簿是好的,但 – Gagravarr

0

FAQ的相关条目描述这个如下:

简而言之:在不同的线程 将工作处理不同的文档对象。在多个线程中访问相同的文档不会 工作。

这意味着在工作簿/文件/幻灯片对象不检查 线程安全的,但像全局高速缓存或 其他数据结构的任何全球举行对象是针对多线程访问 相应的保护。

关于同时在不同线程中访问不同工作簿表 的讨论已经有了。尽管这可能会在某种程度上起作用,但它可能会导致很难跟踪错误,因为多线程问题通常只在长时间运行时才会显示,当许多线程处于活动状态并且系统处于高负载状态(即在生产使用中)时!也可能是 它可能会在未来版本的Apache POI中崩溃,因为我们不专门使用此库来测试 。

所以,你需要确保只有一个线程工作的一个工作簿对象在同一时间可以肯定的,例如通过锁定Workbook对象本身。