修改公共资源

时间:2010-09-29 11:32:39

标签: java multithreading

我的情景是: 我有一张excel表。有些线程需要同时修改它。

我需要实现这一点,我正在寻找最佳实践解决方案。 synchronized方法可以解决方案吗?如果是,那么它不会造成饥饿问题,或者每个线程可能需要等待很长时间吗?

还有其他方式吗?

1 个答案:

答案 0 :(得分:3)

不应将Excel工作表用作工作内存。使用这样的资源,您必须管理对它的访问。你不能让线程试图不假思索地写它。我怀疑你会找到一个支持并发的java Excel模块。

创建包含所有数据的数据结构。在该过程开始时,将Excel工作表加载到此数据结构中。让线程修改此数据结构而不是excel电子表格。定期或完成更改后,将数据结构内容导出回Excel电子表格。

您必须自己处理数据并发问题。这里没有本地事务处理。您希望确保不编写一个线程已对其进行某些更改的电子表格的副本,而不是其完整集。这可能会产生令人困惑的结果。此外,如果两个线程同时修改相同的数据,那也会让人感到困惑。

理想情况下,在这种情况下,数据会保存在某个数据库中。这是存储由多个线程同时修改的数据的理想位置。主要是,它还支持交易。如果您使用此解决方案,则可以创建一个脚本,该脚本每五分钟轮询一次数据库并更新Excel电子表格。