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

}

 

posted on 2015-12-04 15:46  duanxz  阅读(2269)  评论(0编辑  收藏  举报