使用Java的文件加锁机制,让运行实例通过java.nio.channels.FileLock获得一个文件的互斥锁
String property = System.getProperty("user.home") + "/agent.lock";
FileLock lck = new FileOutputStream(property).getChannel().tryLock();
if(lck == null) {
System.out.println("A previous instance is already running....");
System.exit(1);
}
System.out.println("This is the first instance of this program...");
// Do some work here.....
打开服务端口可能会受到防火墙的影响;可能和别的端口冲突
private static ServerSocket listenerSocket;
try {
listenerSocket = new ServerSocket(2004);
//At this point, no other socket may listen on port 2004.
} catch(java.net.BindException e) {
System.err.println("A previous instance is already running....");
System.exit(1);
} catch(final IOException e) { // an unexpected exception occurred
System.exit(1);
}
// Do some work here.....
文件可能因为某些原因不能被删除,即使利用Runtime.addShutdownHook()也有可能产生这种情况。
File flagFile = new File("C:\\flagFile");
if(false == flagFile.createNewFile()) {
System.out.println("A previous instance is already running....");
System.exit(1);
}
flagFile.deleteOnExit();
System.out.println("This is the first instance of this program...");
// Do some work here.....