java高併發之hook例項(防止重複啟動程式)
阿新 • • 發佈:2018-11-28
package com.test.testThread; import java.io.File; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.concurrent.TimeUnit; public class TestThread { private final static String LOCK_PATH = "D:/testest/"; private final static String LOCK_FILE = "start_up.lock"; private static boolean flag = false; private static File lockFile = getLockFile(); // 獲取鎖檔案 private static File getLockFile() { return Paths.get(LOCK_PATH, LOCK_FILE).toFile(); } public static void main(String[] args) { Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { System.out.println("The program will end"); if (flag) lockFile.delete(); } }); // 檢測鎖檔案是否存在,若存在,則丟擲異常 if (lockFile.exists()) { throw new RuntimeException("The program already exists"); } try { // 鎖檔案不存在時,建立鎖檔案 lockFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } // 模擬程式的執行 int i = 0; while (i++ < 10) { try { flag = true; TimeUnit.SECONDS.sleep(2); System.out.println("The program is running"); } catch (InterruptedException e) { e.printStackTrace(); } } } }
特點:
在模擬程式的執行的時間範圍內,無法再次啟動本程式。
缺點:
本程式缺少中斷時的處理。