我正在使用file.deleteOnExit()
并file.exists()
确保在任何给定时间点只能运行我的应用程序的一个实例。但是我开始看到该方法的主要缺陷:
1)您可以复制锁定文件周围的所有文件并运行可执行文件。
2)如果JVM进程被强制结束,锁定文件不会被删除。
什么(可能除了套接字锁定)是一个不错的选择?
编辑:
使用套接字仅锁定一个进程效果很好并且非常干净,但我听说与其他应用程序和防火墙的潜在冲突。例如,如果选择的端口由于某种原因被另一个进程使用,我的应用程序会认为另一个实例已经在运行——这就是我想要一个替代解决方案的原因。