1. 程式人生 > >java高併發之hook例項(防止重複啟動程式)

java高併發之hook例項(防止重複啟動程式)

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();
            }
        }
    }

}





 


特點:

在模擬程式的執行的時間範圍內,無法再次啟動本程式。

 

缺點:

本程式缺少中斷時的處理。