Maison > Java > javaDidacticiel > Comment expirer avec précision un thread en Java ?

Comment expirer avec précision un thread en Java ?

Mary-Kate Olsen
Libérer: 2024-12-19 00:18:16
original
835 Les gens l'ont consulté

How to Precisely Timeout a Thread in Java?

Expirer un thread avec précision

Pour établir une limite de temps pour un thread, envisagez d'utiliser ExecutorService plutôt que Timer. ExecutorService offre une solution flexible pour contrôler l'exécution d'un thread dans une durée spécifiée.

Voici un extrait de code affiné utilisant ExecutorService :

import java.util.concurrent.*;

public class ThreadTimeout {

    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Future<String> future = executor.submit(new Task());

        try {
            System.out.println("Started..");
            System.out.println(future.get(3, TimeUnit.SECONDS));
            System.out.println("Finished!");
        } catch (TimeoutException e) {
            future.cancel(true);
            System.out.println("Terminated!");
        }

        executor.shutdownNow();
    }

    static class Task implements Callable<String> {
        @Override
        public String call() throws Exception {
            // Your long-running task should go here.
            return "Ready!";
        }
    }
}
Copier après la connexion

En tirant parti de Future#get(), vous pouvez établir un délai d'attente pour la tâche. Si la tâche se termine dans ce délai, le résultat est récupéré comme prévu. Cependant, s'il ne parvient pas à se terminer dans le temps imparti, le bloc catch est exécuté, vous permettant d'annuler la tâche.

Clarification sur l'utilisation de sleep()

L'inclusion de sleep() dans l'exemple fourni est uniquement à des fins de démonstration. Il est destiné à simuler une tâche de longue durée au sein du SSCCE. Dans votre scénario actuel, remplacez sleep() par la tâche de longue durée souhaitée.

Pour éviter les blocages potentiels, il est crucial de vérifier périodiquement dans la tâche de longue durée si votre thread a été interrompu, comme indiqué dans le extrait de code suivant :

while (!Thread.interrupted()) {
    // Perform your long-running task here.
}
Copier après la connexion

Cette approche méthodique garantira que votre fil répond rapidement aux demandes d'interruption et se termine correctement après l'expiration du délai.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal