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