• 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;
        }
    
    }
    复制代码
  • 相关阅读:
    MYBATIS 的parameter
    深入了解MyBatis参数
    js之onload事件的一点使用心得
    js中document.write的那点事
    MyBatis直接执行SQL查询及批量插入数据
    ng 服务
    ng json格式的序列化和反序列化
    ng 自定义过滤器的创建和使用
    ng 过滤器
    ng 双向数据绑定 实现 注册协议效果
  • 原文地址:https://www.cnblogs.com/exmyth/p/5827423.html
Copyright © 2020-2023  润新知