LockUtil.java 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package com.mes.ui;
  2. import java.io.File;
  3. import java.io.RandomAccessFile;
  4. import java.nio.channels.FileChannel;
  5. import java.nio.channels.FileLock;
  6. import java.nio.channels.OverlappingFileLockException;
  7. public class LockUtil {
  8. private FileChannel channel;
  9. private FileLock lock;
  10. private File file;
  11. private static LockUtil instance = null;
  12. /**
  13. * 获取唯一进程限制的实例
  14. * @Title: getInstance
  15. * @return 唯一进程实例
  16. */
  17. public static LockUtil getInstance(){
  18. if(instance == null){
  19. instance = new LockUtil();
  20. }
  21. return instance;
  22. }
  23. /**
  24. * 进程是否正在运行
  25. * @Title: isAppActive
  26. * @return 运行与否
  27. */
  28. public boolean isAppActive() {
  29. File file = new File(".lock");
  30. try {
  31. channel = new RandomAccessFile(file, "rw").getChannel();
  32. try {
  33. lock = channel.tryLock();
  34. } catch (OverlappingFileLockException e) {
  35. closeLock();
  36. return true;
  37. }
  38. if (lock == null) {
  39. closeLock();
  40. return true;
  41. }
  42. Runtime.getRuntime().addShutdownHook(new Thread() {
  43. public void run() {
  44. closeLock();
  45. deleteFile();
  46. }
  47. });
  48. return false;
  49. } catch (Exception e) {
  50. closeLock();
  51. return true;
  52. }
  53. }
  54. protected void deleteFile() {
  55. try {
  56. file.delete();
  57. } catch (Exception e) {
  58. }
  59. }
  60. private void closeLock() {
  61. try {
  62. lock.release();
  63. } catch (Exception e) {
  64. }
  65. try {
  66. channel.close();
  67. } catch (Exception e) {
  68. }
  69. }
  70. }