3

我正在使用file.deleteOnExit()file.exists()确保在任何给定时间点只能运行我的应用程序的一个实例。但是我开始看到该方法的主要缺陷:

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

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

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

编辑:
使用套接字仅锁定一个进程效果很好并且非常干净,但我听说与其他应用程序和防火墙的潜在冲突。例如,如果选择的端口由于某种原因被另一个进程使用,我的应用程序会认为另一个实例已经在运行——这就是我想要一个替代解决方案的原因。

4

1 回答 1

1

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

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

完成后不要忘记小心释放所有资源。

于 2012-12-09T04:48:49.847 回答