Maison > Java > javaDidacticiel > Comment puis-je implémenter un mécanisme de délai d'attente pour les tâches en Java à l'aide de Timers et d'ExecutorService ?

Comment puis-je implémenter un mécanisme de délai d'attente pour les tâches en Java à l'aide de Timers et d'ExecutorService ?

Mary-Kate Olsen
Libérer: 2024-12-25 12:39:09
original
765 Les gens l'ont consulté

How Can I Implement a Timeout Mechanism for Tasks in Java using Timers and ExecutorService?

Définition d'une minuterie en Java

Cette question portait initialement sur la configuration d'une minuterie pour tenter une connexion à une base de données et lever une exception en cas de problème de connexion surgir. La question clarifiée va plus loin en demandant à un minuteur d'exécuter une tâche pendant une période de temps spécifiée, en lançant une exception si la tâche dépasse cette durée.

Définition d'une minuterie

Pour définir une minuterie, créez un objet java.util.Timer :

Timer timer = new Timer();
Copier après la connexion

Pour exécuter la tâche une fois, planifiez-la en utilisant Timer.schedule() :

timer.schedule(new TimerTask() {
    @Override
    public void run() {
        // Database code here
    }
}, 2*60*1000); // 2 minutes in milliseconds
Copier après la connexion

Pour répéter la tâche à l'intervalle spécifié, utilisez Timer.scheduleAtFixedRate() :

timer.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
        // Database code here
    }
}, 2*60*1000, 2*60*1000);
Copier après la connexion

Mécanisme de délai d'attente

Pour définir un délai d'expiration pour une tâche, utilisez un ExecutorService :

ExecutorService service = Executors.newSingleThreadExecutor();

try {
    Runnable r = new Runnable() {
        @Override
        public void run() {
            // Database task
        }
    };

    Future<?> f = service.submit(r);

    f.get(2, TimeUnit.MINUTES); // attempt the task for 2 minutes
}
catch (InterruptedException e) {
    // Thread interrupted during sleep, wait, or join
}
catch (TimeoutException e) {
    // Took too long!
}
catch (ExecutionException e) {
    // Exception within the Runnable task
}
finally {
    service.shutdown();
}
Copier après la connexion

Ce code s'exécutera normalement si la tâche se termine dans les 2 minutes. Sinon, une TimeoutException sera levée et le thread continuera à s'exécuter jusqu'à ce qu'il rencontre une exception dans la base de données ou la connexion réseau.

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