3

进程 A 在执行时写入文件 XYZ。有进程 B 和 C,它们在执行时会读取文件 XYZ。因此,当进程 A 启动时,B 和 C 应该等待 A 完成。为了提供同步,我可以使用 java.nio 包吗?或者我应该使用 FileLock 或套接字之类的东西?我们可以提一下等待第二个进程等待的时间吗?

已编辑:文件是在第一次写入过程中创建的。在这种情况下,我可以将其设为共享资源吗?

4

3 回答 3

1

我希望使用 java.nio 包的文件锁可能是一个更好的解决方案。但是,我认为 java.nio 直到 JDK 1.6 才成熟。 http://www.withoutbook.com/DifferenceBetweenSubjects.php?subId1=7&subId2=43&d=Java%206%20vs%20Java%207

文件锁:http : //docs.oracle.com/javase/7/docs/api/java/nio/channels/FileLock.html

于 2014-07-29T11:36:17.410 回答
0

一种方法可能是使用标志。只是一个boolean stillWriting从外部可读的。进程 A 完成其作业后,此标志设置为,false并且您的进程 B/C 可以使用此文件开始工作。假设 A 想重新开始编辑这个文件,它将把这个标志设置回true并阻止其他两个进程。

于 2014-07-25T11:05:02.970 回答
0

使用锁将是一个好主意。您可以使用 JavaAPi 中的条件。参考[ http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/Condition.html#awaitNanos(long)][1]

当 A 正在工作时,它应该向线程发出等待信号,然后在完成时发出信号,以便其他等待启动的线程可以继续。当我们使用共享资源时,这也是非常合适的。

于 2014-07-25T12:38:51.020 回答