2015-04-02 123 views
-1

我有一个文件模拟10X3阵列。第一列是一个序列号,女巫是独一无二的,所以我可以分辨每一行。我问是否有可能同步2个线程写入同一个文件,根据它们的行来锁定它们(如果线程2在同一行写入线程1想写入的话,线程1不能访问文件,它们可以同时写入其他行)。我有一个包含10个ReentrantLock()项目的Lock数组,每个Lock项目都会锁定相应的id行(他们在为文件搜索ID之前获取锁定)。简单的方法是将文件加载到数组中。但我想知道如果我能在文件中实现这一点。我不深入了解Java中的文件是如何工作的,但我主要关心的是,当他们在文件中同时写入时,最后结束的线程将给出文件的最终值,因此迄今为止所做的任何更改由其他线程将被删除,因为该文件需要保存。同时写入JAVA中的多个线程的单个文件,按行同步

+0

为什么你需要同时写入文件?按顺序执行这些更改会不会更简单? – 2015-04-02 15:28:31

+0

我不相信Java的'OutputStream'支持像这样通过文件中途写入。可能还有另一种方法可以做到这一点,但在我10年的Java行业经验中,这从来没有必要或实用。另一件需要考虑的事情是磁盘总是比CPU慢,所以多线程写入不会让你获得任何加速。我认为,只有在将多个文件写入多个独立磁盘的情况下才能获得加速。 – CodeBlind 2015-04-02 15:29:58

+0

[This](http://stackoverflow.com/q/7565034/2675154)对于C++来说是一个类似的问题,但也许答案给你一些一般的见解。 – honk 2015-04-02 15:32:58

回答

1

有一个文件,这是不可能的,我认为你提到的原因。

如果你真的想用纯文本文件做到这一点,你可以为每一行创建一个文件。另一种选择是使用Document。一旦完成所有工作,将文档解析为纯文本文件应该很容易。

最简单的解决方案是在我看来使用数据库,特别是如果有机会在稍后增加数组的大小。

+0

我想我会去与阵列。当然,一个数据库将是最好的想法,但我想要一个项目。我正在考虑这两种方式(因为我们有文件而不是数据库)。也许当我完成它时,我会测试其他方法并发布一些结果:) – 2015-04-02 16:01:16