Swing Hacks の "Hack 84. Construct Single-Launch Applications" などで紹介されている方法です。
static final int LOCK_PORT = 38629;
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(LOCK_PORT);
// 多重起動ではなかった
} catch (IOException e) {
// 多重起動だった
}
JAVAの二重起動防止は可能? などで紹介されている方法です。
FileOutputStream fos = new FileOutputStream("/path/to/file-to-lock");
FileChannel fc = fos.getChannel();
FileLock fl = fc.tryLock();
if (fl == null) {
// 多重起動だった
} else {
// 多重起動ではなかった
}