ホームページ >Java >&#&チュートリアル >Java アプリケーションのインスタンスを一度に 1 つだけ実行するようにするにはどうすればよいですか?

Java アプリケーションのインスタンスを一度に 1 つだけ実行するようにするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-17 15:12:11339ブラウズ

How to Ensure Only One Instance of a Java Application Runs at a Time?

Java での単一インスタンス アプリケーションの実現

実行時に単一インスタンスのみを作成する MSN や Windows Media Player などの特定のアプリケーションとは対照的にJava アプリケーションは実行中に複数のインスタンスを生成する場合があります。この記事では、以下で説明する実証済みの方法を使用して単一インスタンスの Java アプリケーションを作成する方法を検討します。

Java アプローチ

Mutex クラスがこれを処理する C# とは異なります。 Java では、次のような独自のアプローチが使用されます。

  1. ロック ファイルの作成:アプリケーションが実行中であることを示す一意のファイルを作成し、複数のインスタンスを防止します。
  2. ファイル ロックの取得: RandomAccessFile.getChannel().tryLock() を使用して、ロック ファイルのロックを取得します。これにより、1 つのアプリケーションだけがファイルへの書き込みアクセス権を持つことが保証されます。
  3. シャットダウン フックの登録: シャットダウン フックを登録して、アプリケーションの終了時に自動的にロックを解放し、ロック ファイルを削除します。
  4. Call lockInstance(): メイン メソッドで lockInstance() メソッドを呼び出して単一インスタンスを強制します機能。
private static boolean lockInstance(final String lockFile) {
    try {
        final File file = new File(lockFile);
        final RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
        final FileLock fileLock = randomAccessFile.getChannel().tryLock();
        if (fileLock != null) {
            Runtime.getRuntime().addShutdownHook(new Thread() {
                public void run() {
                    try {
                        fileLock.release();
                        randomAccessFile.close();
                        file.delete();
                    } catch (Exception e) {
                        log.error("Unable to remove lock file: " + lockFile, e);
                    }
                }
            });
            return true;
        }
    } catch (Exception e) {
        log.error("Unable to create and/or lock file: " + lockFile, e);
    }
    return false;
}

以上がJava アプリケーションのインスタンスを一度に 1 つだけ実行するようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。