【发布时间】:2010-08-26 18:31:50
【问题描述】:
可能的重复:
How to implement a single instance Java application?
How do I make sure only one instance of my program can be executed?
什么是实现这一目标的好方法?我已经阅读了涉及绑定到端口的方法。这会干扰使用相同方法的其他应用程序吗?
【问题讨论】:
可能的重复:
How to implement a single instance Java application?
How do I make sure only one instance of my program can be executed?
什么是实现这一目标的好方法?我已经阅读了涉及绑定到端口的方法。这会干扰使用相同方法的其他应用程序吗?
【问题讨论】:
绑定到端口不好。尝试启动应用程序并重置网络适配器,看看会发生什么。其他应用程序也可能需要使用该端口。
我认为最好对外部资源(例如文件)实施锁定,但必须注意:如果 pc 重新启动或类似情况,则有必要检测过时的锁定。
您检查过 Apache commons 或 JBoss 项目了吗?我敢打赌必须有一个图书馆才能正确地做到这一点。
【讨论】:
仅当他们使用相同的端口时,并且有很多端口。只是不要使用其中一种常见的。
有些软件也会使用某种锁定文件。因此,如果存在,第二个实例将不会启动。
【讨论】:
一般概念是您定义一个 TCP 端口,然后在应用程序启动时将其绑定(侦听器/服务器)。如果您未能绑定到它,那么您知道您的应用程序的另一个实例已经在运行。
如果另一个应用程序将同一端口用于其他用途(或用于相同目的),那么这将失败。因此,将要使用的端口放在可执行文件之外的配置文件中是有意义的,以便可以将其配置为使用相关机器上尚未使用的端口。
【讨论】:
您确实可以将ServerSocket 绑定到特定的 TCP/IP 端口。如果该端口已被使用,bind 将抛出 IOException。
此方法不会干扰使用相同方法的其他应用程序,除非另一个应用程序碰巧打开了相同的端口(TCP/IP 端口由 16 位数字标识)。所以你应该选择一个固定的端口号,并希望没有其他应用程序偶然使用相同的端口号。
请注意,在 Windows 上,您可以使用命令 netstat 查看哪些端口被哪些可执行文件使用。
【讨论】: