【发布时间】:2015-04-02 15:18:20
【问题描述】:
我有一个模拟 10X3 数组的文件。第一列是一个序列号,女巫是唯一的,所以我可以区分每一行。我在问是否可以同步 2 个线程以在同一个文件中写入,根据它们所在的行锁定它们(如果线程 2 在同一行中写入线程 1 想要写入,则线程 1 无法访问文件,它们可以同时写入其他行)。我有一个包含 10 个 ReentrantLock() 项的 Lock 数组,每个 Lock 项将锁定相应的 id 行(他们在搜索文件中的 ID 之前获得锁)。简单的方法是将文件加载到数组中。但我想知道我是否可以在文件中实现这一点。我不深入了解文件在java中是如何工作的,但我主要担心的是,当它们同时写入文件时,最后结束的线程将给出文件的最终值,所以到目前为止所做的任何更改其他线程将被删除,因为需要保存文件。
【问题讨论】:
-
为什么需要并发写入文件?按顺序执行更改不是更简单吗?
-
我不相信 Java 的
OutputStream支持这样的文件中途写入。可能还有另一种方法可以做到这一点,但在我 10 年的 Java 行业经验中,它从来没有必要或实用。要考虑的另一件事是磁盘总是比 CPU 慢,因此多线程写入不会为您带来任何加速。我认为获得加速的唯一方法是将多个文件写入多个独立磁盘。 -
This 是 C++ 的一个类似问题,但也许答案会给您一些一般性的见解。
-
其实这个文件比那个大很多,而且对文件的改动也很大。我只是举了那个例子,因为它更简单。问题还是一样的。另外我想测试一些策略之间的效率。
标签: java multithreading file synchronization locking