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

