• java程序怎么在一个电脑上只启动一次,只开一个进程


    目录

    linux文件锁flock

    NIO文件锁FileLock

    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;
        }
    
    }
  • 相关阅读:
    Shell脚本学习笔记2
    Shell脚本学习笔记1
    华大MCU硬件SMBus的应用
    华大MCU的应用中的问题记录
    STM32定时器输入捕获功能应用——超声波模块
    STM32定时器应用——PWM
    利用KEIL的软件仿真的逻辑分析仪功能观察GPIO的波形
    周期性过程数据通信和非周期性邮箱数据通信
    JDBCUtils
    反射
  • 原文地址:https://www.cnblogs.com/duanxz/p/5019501.html
Copyright © 2020-2023  润新知