如何确保JAVA程序在一台机器上不能同时运行两个实例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何确保JAVA程序在一台机器上不能同时运行两个实例相关的知识,希望对你有一定的参考价值。
最简单的方法是在程序运行起来后创建一个临时文件(或在文件中写入一个运行标志),每次运行程序前读取这个文件,如果这个文件存在(或运行标志已经设置),说明有该程序已经运行着一个实例;但要注意在程序退出前确保删除这个文件。
还有一种方法是调用jdk内置的jps命令($JAVA_HOME/bin/jps),这个命令可以查看当前运行着的java程序及运行参数。比如你的程序的运行方式如下
java -cp app.jar com.example.Main调用
jps -l可以得到类似如下输出
<进程id> com.example.Main可以通过判断输出是否存在程序的入口类来判断程序是否已经运行。
参考技术A 没实践过,提供个思路给你: 1.比如程序启动后你可以在某个目录下,最好是本程序自己的所在目录里建立一个特殊名字的文件,每当启动该程序检测文件存在与否,关闭程序则删除文件.2. 找找如何获得系统进程,如何给自己的程序自定义一个进程名,之后就是启动前检测进程存在与否,思路大概这样.
就想到2种,希望能帮助你 参考技术B 启动后,使用文件锁锁住文件,第二个进程查看是否文件被锁,如果锁了,就退出去,如:
FileChannel channel = new RandomAccessFile(随便一个文件, "rw").getChannel();
if(channel.tryLock()== null)
//已经有了进程
channel.close();
System.exit(0);
本回答被提问者和网友采纳 参考技术C 使用单例模式。
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。[2]
Static uniqueInstance是singleton的唯一实例, static sharedInstance将把它返回客户端。通常,sharedInstance会检查uniqueInstance是否已经被实例化。如果没有,它会生成一个实例然后返回uniqueInstance。[2]
以上是关于如何确保JAVA程序在一台机器上不能同时运行两个实例的主要内容,如果未能解决你的问题,请参考以下文章
如何控制在一台机子上不能同时运行多个此软件,只能运行一个此软件
是否可以在一台机器上以不同的端口运行多个Zookeeper实例?
如何在一台机器上使用资源(.txt 文件)和另一台机器上的脚本在 ssh 上运行 shell 脚本?