| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- 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) {
- }
- }
- }
|