• java程序 避免重复启动的方法


    http://www.cppblog.com/biao/archive/2010/12/23/137254.html

     1 package swingtest;
     2 
     3 import java.io.File;
     4 
     5 import java.io.RandomAccessFile;
     6 
     7 import java.nio.channels.FileChannel;
     8 
     9 import java.nio.channels.FileLock;
    10 import java.util.concurrent.TimeUnit;
    11 
    12 
    13 public class SingleApplication {
    14 
    15     // 在应用程序的main方法里调用此函数保证程序只有一个实例在运行.
    16 
    17     public static void makeSingle(String singleId) {
    18 
    19         RandomAccessFile raf = null;
    20 
    21         FileChannel channel = null;
    22 
    23         FileLock lock = null;
    24 
    25 
    26         try {
    27 
    28             // 在临时文件夹创建一个临时文件,锁住这个文件用来保证应用程序只有一个实例被创建.
    29 
    30             File sf = new File(System.getProperty("java.io.tmpdir") + singleId + ".single");
    31 
    32             sf.deleteOnExit();
    33 
    34             sf.createNewFile();
    35 
    36 
    37             raf = new RandomAccessFile(sf, "rw");
    38 
    39             channel = raf.getChannel();
    40 
    41             lock = channel.tryLock();
    42 
    43 
    44             if (lock == null) {
    45 
    46                 // 如果没有得到锁,则程序退出.
    47 
    48                 // 没有必要手动释放锁和关闭流,当程序退出时,他们会被关闭的.
    49 
    50                 throw new Error("An instance of the application is running.");
    51 
    52             }
    53 
    54         } catch (Exception e) {
    55 
    56             e.printStackTrace();
    57 
    58         }
    59 
    60     }
    61 
    62 
    63     public static void main(String[] args) throws Exception {
    64 
    65         SingleApplication.makeSingle("single.test"); // 保证程序只有一个实例在运行.
    66 
    67 
    68         // 测试: 模拟一个程序正在运行5秒
    69 
    70         System.out.println("Start");
    71 
    72         System.out.println("Waiting 5 seconds.");
    73 
    74         TimeUnit.SECONDS.sleep(25);
    75 
    76 
    77         System.out.println("End");
    78 
    79     }
    80 
    81 }
  • 相关阅读:
    脏数据或者场景考虑不全面引发的生产问题
    框架那些事
    RMI远程方法调用和rpc远程过程调用
    如何提高开发效率
    什么是RPC
    TCP/IP协议和HTTP协议
    apache常见错误:VC运行库(找不到 VCRUNTIME140.dll)
    Apache报错:无法使用可靠的服务器域名
    Apache2.4 下载和安装
    Navicat Premium 15.0.17 破解激活(DFoX 注册机)
  • 原文地址:https://www.cnblogs.com/yangxiaobo-blog/p/11664348.html
Copyright © 2020-2023  润新知