站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题如何控制程序只启动一次

如何控制程序只启动一次

摘要: 如何控制程序只启动一次


如何控制程序只启动一次,不会有两个同时启动着。


给你个建议,linux下的很多服务程序喜欢在启动之后,建立一个文件,并且是不可删除的,只要程序退出后才删除,启动之前如果存在这样的文件则认为已启动过相同的服务,不能再启动了,那个可以叫做是进程文件

我们常用的应用服务器,Tomcat用一个系统临界资源,如端口号只能打开一个,软件打开了某号端口,再次打口则会发现该端口已被用,不能启动,退出程序时关闭该端口

在VB中则更简单了,只要一个语句判断一下是否要该程的一个实例已启动

把应用程序看作是一个类,每个启动则是运行应用程序的一个实例。

让每个实例去控制系统共享资源,则能让每个实例互相感知,达到控制。


全局变量?还是通过写文件进行标识?


Java在处理进程间通信比较麻烦,不能用内核对象或者共享内存

用临界资源,端口号或者共同的文件吧


再顶一下,真的只能这样吗?


程序启动的时候调用这个函数,返回true就退出



private static boolean isRunning(String modelName) {
try { //获得实例标志文件
flagFile = new File(-#34;C:// modelName);
if (!flagFile.exists()) {
flagFile.createNewFile();
}
lock = new FileOutputStream(-#34;C://-#34; + modelName).
getChannel().tryLock(); //返回空表示文件已被运行的实例锁定
if (lock == null) {
return true;
}
} catch (Exception ex) {
ex.printStackTrace();
return true;
}
return false;
}



这个问题好像刚有人问过


采用生成一个文件的办法是一个很好的办法,实现简单,并且实用。

如果不想采用生成文件的办法,则可以依靠操作系统的支持。比如,Windows 下的 Mutex。采用 JNI 提供接口,不过这些方法更复杂。



↑返回目录
前一篇: java中有4中还是3中访问控制符?
后一篇: 弱弱的问一个java界面方面的问题?