gpt4 book ai didi

java - 如何确保只有一个 Java 应用程序实例在运行?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:04:41 25 4
gpt4 key购买 nike

我想让我的应用程序检查它自己的另一个版本是否已经在运行。

例如,demo.jar启动,用户点击再次运行,但是第二个实例意识到“哦等等,已经有一个demo.jar正在运行。 “并退出并显示一条消息。

最佳答案

强制使用 ServerSocket 锁运行程序的一个实例

Java 代码。将其放入名为 Main.java 的文件中:

import java.net.*;
import java.io.*;
public class Main{
public static void main(String args[]){
ServerSocket socket = null;
try {
socket = new ServerSocket(34567);
System.out.println("Doing hard work for 100 seconds");
try{ Thread.sleep(100000); } catch(Exception e){ }
socket.close();
}
catch (IOException ex) {
System.out.println("App already running, exiting...");
}
finally {
if (socket != null)
try{ socket.close(); } catch(Exception e){}
}
}
}

编译运行

javac Main.java
java Main

正常情况下测试一下:

运行程序。您有 100 秒的时间在另一个终端中再次运行该程序,它会说它已经在运行了。然后等待 100 秒,它应该允许您在第二个终端中运行它。

用 kill -9 强制停止程序后测试它

  1. 在终端 1 中启动程序。
  2. 在 100 秒内从另一个终端 kill -9 该进程。
  3. 再次运行程序,允许运行。

结论:

套接字占用是在你的程序不再运行时被操作系统清理掉的。所以你可以确定程序不会运行两次。

缺点

如果某个偷偷摸摸的人或某个顽皮的进程要绑定(bind)所有端口,或仅绑定(bind)您的端口,那么您的程序将不会运行,因为它认为它已经在运行。

关于java - 如何确保只有一个 Java 应用程序实例在运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10508846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com