
正文
java程序 避免重复启动的方法
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
http://www.cppblog.com/biao/archive/2010/12/23/137254.html
package swingtest; import java.io.File; import java.io.RandomAccessFile; import java.nio.channels.FileChannel; import java.nio.channels.FileLock;
import java.util.concurrent.TimeUnit; public class SingleApplication { // 在应用程序的main方法里调用此函数保证程序只有一个实例在运行. public static void makeSingle(String singleId) { RandomAccessFile raf = null; FileChannel channel = null; FileLock lock = null; try { // 在临时文件夹创建一个临时文件,锁住这个文件用来保证应用程序只有一个实例被创建. File sf = new File(System.getProperty("java.io.tmpdir") + singleId + ".single"); sf.deleteOnExit(); sf.createNewFile(); raf = new RandomAccessFile(sf, "rw"); channel = raf.getChannel(); lock = channel.tryLock(); if (lock == null) { // 如果没有得到锁,则程序退出. // 没有必要手动释放锁和关闭流,当程序退出时,他们会被关闭的. throw new Error("An instance of the application is running."); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { SingleApplication.makeSingle("single.test"); // 保证程序只有一个实例在运行. // 测试: 模拟一个程序正在运行5秒 System.out.println("Start"); System.out.println("Waiting 5 seconds."); TimeUnit.SECONDS.sleep(25); System.out.println("End"); } }








