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