java程序怎么在一个电脑上只启动一次,只开一个进程
目录
方案1:
单进程程序可以用端口绑定。程序启动的时候可以尝试看该端口是否已经被占用,如果占用则程序已经启动。
方案2:
你可以在java程序中创建一个隐藏文件,程序退出的时候删除这个文件。这样在程序启动的时候,你判断是否存在这个文件,如果存在说明已经启动。
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileLock; /**
* FileLockManager 文件锁管理
*
*/
public class FileLockManager { private FileLock fileLock = null; private File file = null; private RandomAccessFile randomAccessFile = null; public FileLockManager(String fileName) {
this.file = new File(fileName);
} public FileLockManager(File file) {
this.file = file;
} /**
* 文件加锁并创建文件
*
* @return
* @throws IOException
*/
public boolean Lock() throws IOException {
if (!this.file.exists()) {
this.file.createNewFile();
this.randomAccessFile = new RandomAccessFile(this.file, "rw");
this.fileLock = this.randomAccessFile.getChannel().tryLock();
if (this.fileLock.isValid()) {
return true;
} else {
return false;
} } else {
return false;
} } /**
* 解锁并删除文件
*
* @return
* @throws IOException
*/
public boolean unLock() throws IOException {
if (!this.file.exists()) {
return true;
} else {
if (this.fileLock != null) {
this.fileLock.release();
}
if (this.randomAccessFile != null) {
this.randomAccessFile.close();
}
if (this.file.delete()) {
return true;
} else {
return false;
} } } /**
* @return Returns the fileLock.
*/
public FileLock getFileLock() {
return this.fileLock;
} /**
* @param fileLock
* The fileLock to set.
*/
public void setFileLock(FileLock fileLock) {
this.fileLock = fileLock;
} }
java程序怎么在一个电脑上只启动一次,只开一个进程的更多相关文章
- 使用apache daemon让java程序在unix系统上以服务方式运行
通过使用apache_commons_daemon,可以让Java程序在unix系统上以服务器的方式运行. 当然,通过wrapper也是可以达到这样的目的,wrapper还可以指定java应用中用到的 ...
- 怎么在一台电脑上同时启动多个tomcat
怎么在一台电脑上同时启动多个tomcat? 应用场景: 一台电脑,需要同时部署多个tomcat,用于部署不同的系统 分布式系统,一个系统,同时需要开启多个tomcat,因为分布式系统可能会有多个war ...
- java程序在一个电脑上只启动一次,只开一个进程
方案1: 单进程程序可以用端口绑定.程序启动的时候可以尝试看该端口是否已经被占用,如果占用则程序已经启动. 方案2:你可以在java程序中创建一个隐藏文件,程序退出的时候删除这个文件.这样在程序启动的 ...
- 工作3年的Java程序员,轻松拿到阿里P6Offer,只因为他搞明白了Redis这几个问题!!
Redis中的多路复用模型 Redis6用到了多线程?那多线程应用在哪些地方,引入多线程后,又改如何保证线程安全性呢? 同时,如何在性能和线程安全性方面做好平衡? 关于Redis的单线程模型 在Red ...
- Java基础知识强化之多线程笔记05:Java程序运行原理 和 JVM的启动是多线程的吗
1. Java程序运行原理: Java 命令会启动Java 虚拟机,启动 JVM,等于启动了一个应用程序,也就是启动了一个进程.该进程会自动启动一个 “主线程” ,然后主线程去调用某个类的 m ...
- 如何在同一台电脑上部署多个tomcat实现多个tomcat在同一台电脑上同时启动
有时候我们在开发的过程中难免会遇到需要在同一台电脑部署多个tomcat,且还要他们能够都单独同时启动不会对其他的tomcat造成影响 本文就简单记录一下,如何来实现这个骚操作 1. 下载tomcat的 ...
- 如何在一个电脑上使用两个github账号
问题描述:公司电脑上默认使用的是公司的github账号,如果希望写一些代码放到个人的github账号上,就需要配置让一个电脑上可以使用两个github账号 原理:管理两个SSH key 1.生成两个S ...
- 如何在一个电脑上同时使用两个Git的账号
前言 又需要登录公司的账号,又想在电脑上使用自己的账号. 实现 首先是git config方面的设置,要取消掉原本对于git账号的全局设置. git config --global --unset u ...
- 关于使用dotnetbar开发winform程序在用户电脑上部署时问题
1.首先要安装两个软件
随机推荐
- 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)
写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...
- vue-router配置之通用路径
目的:浏览器地址栏输入了未匹配的地址时,前端控制跳转到首页index页面: 项目入口js:(一般根据项目结构不同,这个js一般取名为:app.js或者main.js) import Router fr ...
- 网络编程(socket,套接字)
服务端地址不变 ip + mac 标识唯一一台机器 ip +端口 标识唯一客户端应用程序 套接字: 网络编程 网络编程 一.python提供了两个级别访问的网络服务 低级别的网络服务支持基本的 S ...
- ZEDGRAPH画图心得
OleDbConnection odcConnection = new OleDbConnection(MyConnectionString); //打开连接 C#操作Access之按列读取mdb o ...
- nw 系统托盘的添加方式,以及ajax失效问题
1.nw 系统托盘的添加方式 /** ------------------------------------------------------------ 最小化托盘 -------------- ...
- E - An Awful Problem 求两段时间内满足条件的天数//lxm
In order to encourage Hiqivenfin to study math, his mother gave him a sweet candy when the day of th ...
- java 百分比显示Double类型数值
DecimalFormat percent = new DecimalFormat("0.00%"); completed_num = (double) involvedTask_ ...
- 学习magento要学哪些知识
php框架水平,具体点的就是大名鼎鼎的ZF框架.别急,先还是熟悉下OSC吧,主要是热身下商城的那些业务流的知识,基本的数据流程.自己做模板的话CSS2.0水平还不能太低.JS框架JQ吧相对简单点.当然 ...
- 20155316 2016-2017-2 《Java程序设计》第5周学习总结
教材学习内容总结 这周总结 try catch语法 异常继承结构 throw finally AutoCloseable接口 Collection Map Lambda表达式 上周总结 三个关键 类与 ...
- 我的第一个Mybatis程序
第一个Mybatis程序 在JDBC小结中(可以参阅本人JDBC系列文章),介绍到了ORM,其中Mybatis就是一个不错的ORM框架 MyBatis由iBatis演化而来 iBATIS一词来源于“i ...