我有这个有点不寻常的流程结构:
- Launch4J 启动我的 Java 应用程序。它创建一个互斥体来为 Java 应用程序提供单实例功能。
- Java 应用程序启动一个 VB6 应用程序,该应用程序可以有多个实例。
- 当 Java 应用程序终止时,VB6 应用程序仍在运行。 (期望的行为)
问题是:Launch4J 创建的互斥体仅在 VB6 应用程序终止后才被释放。因此,不可能再次启动 Java 应用程序。
为什么会发生这种情况?我没有明确打开互斥锁...
我首先怀疑这是因为 Java 使用了 CreateProcess
和 bInheritHandles == true
,但是当我启动 notepad.exe
时,问题并没有发生。
编辑:我仍然遇到这个问题。任何指示表示赞赏!
最佳答案
Launch4J 是否在终止前释放互斥体并关闭其句柄?抱歉,我不知道 Java 如何包装 OS Mutex 函数,但您应该确保在线程结束之前显式释放互斥体并关闭其句柄。
关于java - 应用程序为什么/如何保留另一个进程创建的互斥体引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1366150/