Java程序只运行一个实例[转]
如果希望你的Java程序只能存在一个实例,可以参考下面的用法。
原文链接:http://blog.csdn.net/yaerfeng/article/details/7264729
Java没有提供这样的机制。从操作系统的观点来看,一个启动的Java Application仅仅是一个JVM的运行实例。运行相同Application的两个实例,仅仅是运行两个无关的JVM。
只有让多个运行实例之间有一个既定的通讯机制就可以保证只有一个实例运行。
方案1:使用Java的加锁文件机制,idea相当简单,让运行实例通过java.nio.channels.FileLock获得一个"well-known"文件的互斥锁
import java.io.*;
import java.nio.channels.*;
public class OneInstance_1 {
public static void main(String[] args) throws Exception {
FileLock lck = new FileOutputStream("C:\\flagFile").getChannel().tryLock();
if(lck == null) {
System.out.println("A previous instance is already running....");
System.exit(1);
}
System.out.println("This is the first instance of this program...");
// Do some work here.....
}
}
问题:平台相关
方案2:使用java.net.ServerSocket
import java.io.*;
import java.net.*;
public class OneInstance_2 {
private static ServerSocket listenerSocket;
public static void main(String[] args) {
try {
listenerSocket = new ServerSocket(2004);
//At this point, no other socket may listen on port 2004.
} catch(java.net.BindException e) {
System.err.println("A previous instance is already running....");
System.exit(1);
} catch(final IOException e) { // an unexpected exception occurred
System.exit(1);
}
// Do some work here.....
}
}
问题:打开服务端口可能会受到防火墙的影响;可能和别的端口冲突
方案3:使用File.createNewFile() and File.deleteOnExit()
import java.io.*;
public class OneInstance_3 {
public static void main(String[] args) throws Exception {
File flagFile = new File("C:\\flagFile");
if(false == flagFile.createNewFile()) {
System.out.println("A previous instance is already running....");
System.exit(1);
}
flagFile.deleteOnExit();
System.out.println("This is the first instance of this program...");
// Do some work here.....
} }
来源:·BBS 水木清华站 smth.org·[FROM: 202.108.130.*]
问题:文件可能因为某些原因不能被删除,即使利用Runtime.addShutdownHook()也有可能产生这种情况。
Java程序只运行一个实例[转]的更多相关文章
- vc++高级班之窗口篇[4]---让程序只运行一个实例
大家都看过或者使用过类似只运行一个实例的程序,比如:QQ游戏.部分浏览器 等等! 让一个程序只运行一个实例的方法有多种,但是原理都类似,也就是在程序创建后,有窗口的程序在窗口创建前, 检查系统中是 ...
- VC 实现程序只运行一个实例,并激活已运行的程序
转载:http://blog.sina.com.cn/s/blog_4b44e1c00100bh69.html 进程的互斥运行:CreateMutex函数实现只运行一个程序实例 正常情况下,一个进程的 ...
- C#让应用程序只运行一个实例的几种方法
一 判断是否有相同的实例已经运行 1 根据“Mutex”判断是否有相同的实例在运行 /// <returns>已有实例运行返回true,否则为false</returns>pu ...
- [VC]在VC++中实现让程序只运行一个实例的方法且实现该实例
方法一: 有时候在开发应用程序时,希望控制程序运行唯一的实例.例如,最常用的mp3播放软 件Winamp,由于它需要独占计算机中的音频设备,因此该程序只允许自身运行唯一的一个例程.在Visual C+ ...
- VC程序只运行一个实例,并在打开多个时激活原窗口
(一)单文档应用程序 1.在应用程序类C~~App::InitInstance()函数中判断是否已有一个应用程序实例正在运行 BOOL C~~App::InitInstance() { . ...
- Winform(C#)限制程序只运行一个实例
C#控制只运行开启一个程序 在这个例子中不需要调用ReleaseMutex,mutex会在程序结束时自动释放.为了防止mutex过早释放,在程序的最后调用下GC.KeepAlive (mutex). ...
- 让程序只运行一个实例(Delphi篇)(三种方法,其中使用全局原子的方法比较有意思)
Windows 下一个典型的特征就是多任务,我们可以同时打开多个窗口进行操作,也可以同时运行程序的多个实例,比如可以打开许多个资源管理器进行文件的移动复制操作.但有时出于某种考虑(比如安全性),我们要 ...
- WPF程序只运行一个实例
1.WPF程序在 启动窗口的构造函数执行InitializeComponent之前判断是否已经存在实例 不涉及服务器情况,可直接进行判断(不在mainwindow的构造函数中判断) // public ...
- 关于WPF程序只运行一个实例的方法
找到的方法有两种: 1)http://www.cnblogs.com/liuyazhou/archive/2009/11/02/1594364.html 2)http://codereview.sta ...
随机推荐
- [51nod1457]小K vs. 竹子
小K的花园种着n颗竹子(竹子是一种茎部中空并且长得又高又快的热带植物).此时,花园中第i颗竹子的高度是hi米,并且在每天结束的时候它生长ai米. 实际上,小K十分讨厌这些竹子.他曾经试图去砍光它们,但 ...
- LightOJ DNA Prefix(字典树+dfs)
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=121897#problem/F F - DNA Prefix Time Limit:200 ...
- android手机安全卫士、Kotlin漫画、支付宝动画、沉浸状态栏等源码
Android精选源码 轻量级底部导航栏 android手机卫士源码 android实现高仿今日头条源码 一个用Kotlin写的简单漫画App源码 android吐槽项目完整源码 ...
- JS 监听浏览器各个标签间的切换
以前看到过一些网页,在标签切换到其它地址时,网页上的标题上会发生变化,一直不知道这个是怎么做的,最近查了一些资料才发现有一个 visibilitychange 事件就可以搞定,这里将介绍一下页面可见性 ...
- Spring框架学习笔记(4)——配置bean more
1.配置List属性 <!-- 配置List属性 --> <bean id="person4" class="com.broadtext.beans.c ...
- java小入门的感觉
工作两三年,.NET与Java都干过,也都是应付差事,用着现有的框架,现有的规范,实现简单的功能,有余力的情况下,看看框架中的代码,欣赏一下前辈们的心血,居然在单位也算有心的了?! 最近的JAVA项目 ...
- ubuntu 下 apt /apt-get command not found 命令找不到
简介:apt 命令在ubuntu下找不到.(针对云平台,等可联网的ubuntu 如果是虚拟机,请确认能否联网 (如是虚拟机且不能联网请参考其他文章,大致方向是先挂载系统镜像再安装)) (ps:一般的 ...
- 风险案例-28期-项目Leader与团队成员缺乏沟通,问题响应度较慢导致团队士气低落,工作效率低
典型案例: A公司某C类项目目前进入开发高峰期,项目组的三个leader预计在项目的实际task投入占比为70%,剩30%工作时间用于指导组员进行作业实施并担当部分管理工作.从项目实施过程中发现Lea ...
- Docker 创建ubuntu ,ssh,vnc 可连接
**************************************************************************************************** ...
- Django_xadmin_应用外键搜索功能错误
问题: 当我在给某一张表加上外键搜索的时候,会出现 TypeError: Related Field got invalid lookup: icontains 问题原因: a 表关联 b表,也就是说 ...