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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM