替代文件锁定以确保只能启动一个应用程序实例

时间:2012-12-09 04:34:08

标签: java io distribution

我正在使用file.deleteOnExit()file.exists()来确保我的应用程序中只有一个实例可以在任何给定的时间点运行。但是我开始发现方法存在重大缺陷:

1)您可以复制锁定文件周围的所有文件并运行可执行文件。

2)如果强制结束JVM进程,则不会删除锁定文件。

什么(除了套接字锁定)可能是一个不错的选择?

修改
使用套接字锁定只有一个进程运行良好,非常干净,但我听说可能与其他应用程序和防火墙发生冲突。例如,如果选择的端口由于某种原因被另一个进程使用,我的应用程序将认为另一个实例已经在运行 - 这就是为什么我想要一个替代解决方案。

1 个答案:

答案 0 :(得分:1)

您可以使用FileChannel#lock()方法进行多JVM锁定:

RandomAccessFile raf = new RandomAccessFile(".lock", "rw");
FileChannel fileChannel = raf.getChannel();
fileChannel.lock();

完成后不要忘记仔细释放所有资源。