我已经看到了许多有关如何防止Java应用程序的示例,例如锁定文件或创建套接字。

如何允许多个实例运行,但检查另一个实例是否正在运行?

我需要执行此操作的原因是,我想在退出时清理一个临时文件夹,但是如果正在运行另一个进程,则不需要这样做。

最佳答案

您可以使用attach API并检查正在运行的虚拟机,如该blog entry中所述


  获取VirtualMachine的另一种方法是询问系统已知的虚拟机列表,然后选择您感兴趣的特定虚拟机,通常按名称进行:

  String name = ...
  List vms = VirtualMachine.list();
  for (VirtualMachineDescriptor vmd: vms) {
      if (vmd.displayName().equals(name)) {
          VirtualMachine vm = VirtualMachine.attach(vmd.id());
          String agent = ...
          vm.loadAgent(agent);
          // ...
      }
  }

10-01 21:31