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;
    }

}

时间: 2024-10-27 02:45:28

java程序在一个电脑上只启动一次,只开一个进程的相关文章

如何从 Google Play 下载 Android 程序到电脑上

想必很多朋友也有需要通过电脑下载Google Play的apk到电脑端的时候,其实很简单,推荐一个网站:APK Downloader APK Downloader 是一个能直接从网页下载Google Play 应用 APK 文件的网站,省去了多余的步骤,只需提交相应应用的 URL 地址即可下载. 下面说一下步骤: 1.登陆Google Play(网址:Google Play Store),必须要有Google账号: 2.找到你需要下载的apk,从地址栏复制该apk的地址,比如coursera:C

xvideos怎么在电脑上看 xvideos怎么打不开

现在是这边使用嘻游加速器的软件打开的 最先打开的时候是没有办法打开的,会显示无法访问此网站, 网络出现了问题.下面教大家再怎么打开 我们先在电脑上下载一个嘻游加速器. 之后我们选择一个国外的节点并且点击启动.稍等一会显示连接成功之后,查看IP是否改变 开启电脑上一款游览器,直接输入网址.如图:这样就OK啦!打开了.现在解放你的双手,开始lulululu吧. 原文地址:http://blog.51cto.com/12003723/2167655

一台电脑上同启动两个Tomcat的方式

?? 安装两个jdk,一个JDK路径在:C:\ProgramFiles (x86)\Java\jdk1.7.0_25,另外一个JDK的路径在E:\UCMSServer\j2sdk 在环境变量里并设置JAVA_HOME为:E:\UCMSServer\j2sdk 复制两个Tomcat,分别命名成:tomcat-61111和 tomcat-62222,如下所示: 进入tomcat-61111\bin,修改startup.bat,在该文件的最上面添加如下两行代码: SET JAVA_HOME=C:\Pr

求助 一个很简单的ACM题 java代码 自己电脑上测都是正确的 但提交总是wrong answer 先谢谢了

题意大致是,给出直角三角形a,b,c(c为斜边)中两个的值(都是正数),求值为-1的那个边.比如3 4 -1,就是求c的长度,输入0 0 0表结束,输出格式如下加粗部分,我自己测自己的运行结果都是正确的,不知为什么总是wa,求大神指点! Mathematics can be so easy when you have a computer. Consider the following example. You probably know that in a right-angled trian

Android 用adb pull或push 拷贝手机文件到到电脑上,拷贝手机数据库到电脑上,拷贝电脑数据库到手机上

先说一下adb命令配置,如果遇到adb不是内部或外部命令,也不是可运行的程序或批量文件.配置下环境变量 1.adb不是内部或外部命令,也不是可运行的程序或批量文件. 解决办法:在我的电脑-属性-高级计算机配置-环境变量,系统变量找到path,把sdk的platform-tools添加进去就可以了. D:\Java\android\android-sdk\platform-tools 2.用命令行把手机上的文件拷贝到电脑上 adb pull sdcard/1222073679.png 拷贝文件夹命

mac电脑上的卸载工具?iTrash附注册机的macOS卸载程序

mac电脑上的卸载工具?iTrash是一个macOS卸载程序,点击这里可以安装附带注册机的版本,它使用称为"Levenshtein距离算法"的特殊搜索算法来查找所有相关文件并将其删除.这是因为许多(尽管不是全部)应用程序在整个系统中安装了多个文件和文件夹,这意味着删除应用程序本身并不足以确保您摆脱一切. iTrash Mac特色 1.鬼模式背景模式.将东西放入垃圾桶并弹出iTrash.2.专家模式使用Levenshtein距离搜索算法,它可以追踪更多可能的相关文件.3.简单的拖放将应用

Java程序性能调优的基本知识和JDK调优

一 基本知识 1.1 性能是什么 在性能调优之前,我们首先来了解一下性能是什么?关于性能,我想每个学习过Java的人都能列出几点,甚至可以夸夸其谈.在<Java TM Platform Performance>一书中,定义了如下五个方面来作为评判性能的标准: 1) 运算的性能--哪一个算法的执行性能最好? 2) 内存的分配--程序运行时需要耗费多少内存? 3) 启动的时间--程序启动需要多长时间?这在Web项目中的影响不大,但要注意部分程序需要部署或运行在客户端时的情形(比如applet程序)

90%的Java程序员不会的10到Java面试题

先来看看这10道Java面试题你会几道?1.为什么等待和通知是在 Object 类而不是 Thread 中声明的?2.为什么Java中不支持多重继承?3.为什么Java不支持运算符重载?4.为什么 String 在 Java 中是不可变的?5.为什么 char 数组比 Java 中的 String 更适合存储密码?6.如何使用双重检查锁定在 Java 中创建线程安全的单例? 编写 Java 程序时, 如何在 Java 中创建死锁并修复它? 如果你的Serializable类包含一个不可序列化的成

使用exe4j打包Java程序

工具: exe4j软件(云盘存) 可以运行的Java程序的jar包 打开我们已经安装好的exe4j软件,首先看到的是一个欢迎界面,我们直接[next]就可以了: 2 在第二步中我们选择[JAR in EXE mode],然后[next]: 第三步中需要输入程序的缩写名字和指明输出目录,就是程序的保存目录,我们按照自己的情况设置就ok,没啥特别要求,然后[next]: 第四步中,我们需要指定程序的名字,设置程序的图标,注意,程序图标要用ico格式的图片: 然后我们在左边的菜单栏中选择[32 bit