我们如何确保即使在2个不同的JVM中也只运行任何应用程序的一个实例

时间:2014-09-13 19:18:31

标签: java unix operating-system

我在接受采访时被问到这个问题。 让我们说VLC播放器在我们的操作系统上运行。 现在,当我们再次尝试启动VLC时,这不应该发生。

或者,假设我们有两个命令窗口,我们在两个不同的Windows中运行相同的java程序。我们怎样才能确保只有一次运行。

这是依赖操作系统的吗? 什么是实施?

我读过有关MUTEX / Semaphore的内容,但我想这只是在一个JVM中。

2 个答案:

答案 0 :(得分:1)

您可以将pid文件写入已知位置的磁盘,指示应用程序已在运行。然后,在启动时,查找该文件。如果它在那里,应用程序已经在运行,那么退出。

留给读者练习:确保即使应用程序崩溃也会删除pid文件。

答案 1 :(得分:1)

一个可能的答案是在启动时打开并侦听特定(且不常见)的tcp服务器端口,因为只有一个进程可以在第二个实例检测到套接字无法侦听时一次保存套接字然后退出并出错。或者,您可以在启动时创建File(如果存在则退出)。