整台电脑的真正单身?
问题描述:
如何在Java中为整个计算机创建真正的单身人士?整台电脑的真正单身?
我有一个用Java编写的控制台应用程序。如果应用程序第二次执行,我希望它知道主应用程序已经在运行(并正在执行作业)。第二次执行只允许用户查询数据(作业)。我知道我可以创建一个文件并将所有内容写入它,但是之后我将不得不支持计算机重置等。
有没有更好的方法来做到这一点?
总结:
- 我启动应用程序。它具有工作并在间隔时间内执行它们。
- 我第二次启动应用程序。我收到消息,说明作业已经运行,我可以从第一个应用程序查询数据。
- 第三次启动应用程序,它的工作原理与第二次相同。
- 如果我停止第一个实例并开始一个新实例,它就像第一个实例一样工作。
P.S.我知道这个问题肯定已经被问过多次,但谷歌和*搜索只给我链接相对于Singleton设计模式。
答
+0
该示例明确指定了一个套接字端口。如果其他应用程序使用相同的端口,这可能会很麻烦。另一种方法是动态分配端口,将端口记录在合适的位置(文件,数据库,注册表等),连接到端口并确认身份。 – 2013-02-23 16:18:19
答
作为@PaulTomblin在评论中提到,您应该可以将服务器套接字绑定到特定端口。这有两个目的。如果端口当前未绑定,则正在运行的进程成为主实例。如果端口已经绑定,则正在运行的进程将成为客户端,而是连接到端口以便与主实例进行通信。
你可以使用套接字通信或类似[terracotta](http://terracotta.org/) – 2013-02-23 15:53:44
来做到这一点单身人士并不是单个JVM的好主意;我认为它们对于机器上的所有JVM都更糟糕。 – duffymo 2013-02-23 15:53:45
让您的第一个应用程序作为服务器连接到套接字。其他人将无法绑定到该端口作为服务器,直到第一个死亡。作为奖励,其他人可以作为客户端进行绑定,并使用该套接字在它们之间进行通信。 – 2013-02-23 15:53:48