package com.mes.ui; import java.io.File; import java.io.RandomAccessFile; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; import java.nio.channels.OverlappingFileLockException; public class LockUtil { private FileChannel channel; private FileLock lock; private File file; private static LockUtil instance = null; /** * 获取唯一进程限制的实例 * @Title: getInstance * @return 唯一进程实例 */ public static LockUtil getInstance(){ if(instance == null){ instance = new LockUtil(); } return instance; } /** * 进程是否正在运行 * @Title: isAppActive * @return 运行与否 */ public boolean isAppActive() { File file = new File(".lock"); try { channel = new RandomAccessFile(file, "rw").getChannel(); try { lock = channel.tryLock(); } catch (OverlappingFileLockException e) { closeLock(); return true; } if (lock == null) { closeLock(); return true; } Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { closeLock(); deleteFile(); } }); return false; } catch (Exception e) { closeLock(); return true; } } protected void deleteFile() { try { file.delete(); } catch (Exception e) { } } private void closeLock() { try { lock.release(); } catch (Exception e) { } try { channel.close(); } catch (Exception e) { } } }