Maison >Java >javaDidacticiel >Comment garantir qu'une seule instance d'une application Java s'exécute à la fois ?

Comment garantir qu'une seule instance d'une application Java s'exécute à la fois ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-17 15:12:11341parcourir

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

Réalisation d'applications à instance unique en Java

Contrairement à certaines applications comme MSN et Windows Media Player, qui ne créent qu'une seule instance lorsqu'elles sont exécutées lors de leur exécution, les applications Java peuvent générer plusieurs instances. Dans cet article, nous allons explorer comment créer des applications Java à instance unique à l'aide de la méthode éprouvée décrite ci-dessous.

Approche Java

Contrairement à C# où la classe Mutex gère cela fonctionnalité, Java utilise une approche distincte :

  1. Créer un fichier de verrouillage : Créez un fichier unique pour indique que l'application est en cours d'exécution, empêchant ainsi plusieurs instances.
  2. Acquérir le verrouillage du fichier : Acquérir un verrou sur le fichier de verrouillage à l'aide de RandomAccessFile.getChannel().tryLock(). Cela garantit qu'une seule application a un accès en écriture au fichier.
  3. Enregistrer le hook d'arrêt : Enregistrez un hook d'arrêt pour libérer automatiquement le verrou et supprimer le fichier de verrouillage lorsque l'application se ferme.
  4. Appelez lockInstance() : Invoquez la méthode lockInstance() dans la méthode principale pour appliquer une instance unique fonctionnalité.
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;
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn