进程A在执行时写入文件XYZ。有进程B和C,它们在执行时读取文件XYZ。因此,当进程A启动时,B和C应该等待进程A完成。为了提供同步,我可以使用java。nio包吗?还是应该使用FileLock或sockets?我们可以提到等待第二个进程等待的时间吗?
Edited:文件是在第一次写过程中创建的。在这种情况下,我可以将其作为共享资源吗?
使用java。我希望nio包的文件锁是一个更好的解决方案。但是,我认为java。nio直到JDK 1.6才成熟。http://www.withoutbook.com/DifferenceBetweenSubjects.php?subId1=7& subId2 = 43, d = Java Java % % 20 vs 206% % 20 207
FileLock: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正在工作时,它应该向线程发出等待信号,然后在完成时,它可以发出信号,以便其他等待启动的线程可以继续。当我们使用共享资源时,这也是非常合适的。