进程 A 在执行时写入文件 XYZ。有进程 B 和 C,它们在执行时会读取文件 XYZ。因此,当进程 A 启动时,B 和 C 应该等待 A 完成。为了提供同步,我可以使用 java.nio 包吗?或者我应该使用 FileLock 或套接字之类的东西?我们可以提一下等待第二个进程等待的时间吗?
已编辑:文件是在第一次写入过程中创建的。在这种情况下,我可以将其设为共享资源吗?
进程 A 在执行时写入文件 XYZ。有进程 B 和 C,它们在执行时会读取文件 XYZ。因此,当进程 A 启动时,B 和 C 应该等待 A 完成。为了提供同步,我可以使用 java.nio 包吗?或者我应该使用 FileLock 或套接字之类的东西?我们可以提一下等待第二个进程等待的时间吗?
已编辑:文件是在第一次写入过程中创建的。在这种情况下,我可以将其设为共享资源吗?
我希望使用 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
一种方法可能是使用标志。只是一个boolean stillWriting
从外部可读的。进程 A 完成其作业后,此标志设置为,false
并且您的进程 B/C 可以使用此文件开始工作。假设 A 想重新开始编辑这个文件,它将把这个标志设置回true
并阻止其他两个进程。
使用锁将是一个好主意。您可以使用 JavaAPi 中的条件。参考[ http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/Condition.html#awaitNanos(long)][1]
当 A 正在工作时,它应该向线程发出等待信号,然后在完成时发出信号,以便其他等待启动的线程可以继续。当我们使用共享资源时,这也是非常合适的。