【问题标题】:Process Synchronization in javajava中的进程同步
【发布时间】:2014-07-25 10:12:24
【问题描述】:

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

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

【问题讨论】:

  • 使用同步资源
  • @user3736770:编辑了你的问题,小。谢谢
  • @DarshanLila:编辑了问题。我们可以将创建的文件作为共享资源吗?
  • 一个“过程”是什么? java.lang.Thread?一个 UNIX 进程?还有什么? ——“写”的意思是“按顺序写”?只有第一次,以后随机更新? -- “B 和 C,总是读取文件”:“总是”的意思是“不间断”?周期性的?顺序还是随机?
  • 我的意思是让同步访问你的文件。

标签: java process synchronization filelock java.nio.file


【解决方案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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-28
        相关资源
        最近更新 更多