【发布时间】:2010-12-21 02:13:53
【问题描述】:
您好,我正在制作一个通过 javaw.exe 运行的程序,因此它不直接可见。现在我的问题是某个时候,(意外地)用户可能会运行同一个应用程序的多个实例,
例如输入javaw myProgram 两次
在这种情况下,如果程序已经在运行,有什么办法可以阻止同一程序的多个实例运行。
【问题讨论】:
-
这篇文章解释了多种预防方法:rgagnon.com/javadetails/java-0288.html
-
套接字技术有点笨拙——你需要一个完全独立的服务器进程来防止多个实例。
FileLock技术是完全错误的,因为FileChannel.tryLock方法只检查一个 JVM 内的重叠锁,而不是跨多个 JVM。来自 FileChannel.tryLock 的文档:“抛出 OverlappingFileLockException - 如果此 Java 虚拟机已持有与请求区域重叠的锁” -
@CameronSkinner 谢谢,你确定在这种情况下它不会返回 null 吗?
-
这看起来像是一个“好”欺骗的例子。答案可能相同,但询问方式不同,以至于人们在搜索另一个时可能找不到。
标签: java