整台电脑的真正单身?

问题描述:

如何在Java中为整个计算机创建真正的单身人士?整台电脑的真正单身?

我有一个用Java编写的控制台应用程序。如果应用程序第二次执行,我希望它知道主应用程序已经在运行(并正在执行作业)。第二次执行只允许用户查询数据(作业)。我知道我可以创建一个文件并将所有内容写入它,但是之后我将不得不支持计算机重置等。

有没有更好的方法来做到这一点?

总结:

  • 我启动应用程序。它具有工作并在间隔时间内执行它们。
  • 我第二次启动应用程序。我收到消息,说明作业已经运行,我可以从第一个应用程序查询数据。
  • 第三次启动应用程序,它的工作原理与第二次相同。
  • 如果我停止第一个实例并开始一个新实例,它就像第一个实例一样工作。

P.S.我知道这个问题肯定已经被问过多次,但谷歌和*搜索只给我链接相对于Singleton设计模式。

+0

你可以使用套接字通信或类似[terracotta](http://terracotta.org/) – 2013-02-23 15:53:44

+1

来做到这一点单身人士并不是单个JVM的好主意;我认为它们对于机器上的所有JVM都更糟糕。 – duffymo 2013-02-23 15:53:45

+6

让您的第一个应用程序作为服务器连接到套接字。其他人将无法绑定到该端口作为服务器,直到第一个死亡。作为奖励,其他人可以作为客户端进行绑定,并使用该套接字在它们之间进行通信。 – 2013-02-23 15:53:48

Here是一个可以做你想做的事情的链接。

这提供了结合在启动一个插座,然后如果事情是在启动时势必然后将其发送的消息

你可以使用这个你的流程之间communitcate的代码的例子。

+0

该示例明确指定了一个套接字端口。如果其他应用程序使用相同的端口,这可能会很麻烦。另一种方法是动态分配端口,将端口记录在合适的位置(文件,数据库,注册表等),连接到端口并确认身份。 – 2013-02-23 16:18:19

作为@PaulTomblin在评论中提到,您应该可以将服务器套接字绑定到特定端口。这有两个目的。如果端口当前未绑定,则正在运行的进程成为主实例。如果端口已经绑定,则正在运行的进程将成为客户端,而是连接到端口以便与主实例进行通信。