代码之家  ›  专栏  ›  技术社区  ›  C. Ross trotttrotttrott

在Java中获得专用系统范围锁定

  •  17
  • C. Ross trotttrotttrott  · 技术社区  · 14 年前

    我正在重新编写一个Java可执行文件,它可以多次启动,我希望这个进程一次执行一个。在C中,我会用一个命名的/系统来做这个。 Mutex ,但在Java中这似乎不可能。如何实现此功能?

    5 回复  |  直到 11 年前
        1
  •  8
  •   C. Ross trotttrotttrott    14 年前

    您可以使用对文件系统上文件的独占访问来实现类似的行为。我不认为有什么类似于你提到的。

    实例

        2
  •  3
  •   Anthony    14 年前

    每次启动Java可执行文件时,都会启动Java虚拟机(JVM)的新实例。它们就像一个不同的工作站。这就是为什么Java中没有像系统互斥这样的东西。

        3
  •  3
  •   Romain Hippeau    14 年前

    Java是一种最不常见的分母工具,它提供了所有运行的平台所通用的功能,也就是说,如果它已经被实现了。
    You could use JNA (访问本机功能的简化方法)

    在过去,我使用套接字来确保程序在运行时无法启动。
    正如其他地方所指出的,基于文件的信号量可以工作,当然,这样做的缺点是如果程序崩溃,那么必须手动重置信号量。

        4
  •  0
  •   Curtis    14 年前

    如果您的操作系统提供了这些互斥体,那么您是否可以使用本机库?( http://en.wikipedia.org/wiki/Java_Native_Interface 当然,您将以OS特定的方式访问此资源,因此您将失去纯Java给您的可移植性。

        5
  •  -1
  •   Alan Krueger    14 年前

    记住Java是在Java虚拟机下运行的。像OS级同步机制一般只影响它运行的机器,本机Java同步机制只在该JVM中工作。

    试图阻止启动多个JVM来做某些事情类似于试图阻止应用程序在多个物理机器上同时运行,这可能不值得做。