Maison Java javaDidacticiel Comment résoudre l'exception de délai d'expiration de concurrence Java (TimeoutException)

Comment résoudre l'exception de délai d'expiration de concurrence Java (TimeoutException)

Aug 18, 2023 am 10:21 AM
超时 并发 异常

Comment résoudre lexception de délai dexpiration de concurrence Java (TimeoutException)

Comment résoudre l'exception de délai d'expiration de concurrence Java (TimeoutException)

Dans la programmation multithread, les opérations simultanées expirent souvent. Lorsque nous devons effectuer une opération de longue durée, si le délai prédéfini est dépassé, une exception de délai d'attente (TimeoutException) doit être levée. Cet article explique comment résoudre les exceptions de délai d'attente de concurrence Java et fournit des exemples de code correspondants.

  1. Utiliser Future et ExecutorService

Une solution courante consiste à utiliser Future et ExecutorService de Java. Nous pouvons encapsuler des opérations fastidieuses dans un objet Callable et utiliser ExecutorService pour soumettre la tâche. Ensuite, utilisez la méthode get de Future pour définir le délai d'attente. Si le résultat n'est pas renvoyé dans le délai spécifié, une exception de délai d'attente sera levée.

Voici un exemple de code :

import java.util.concurrent.*;

public class TimeoutExample {
    public static void main(String[] args) throws InterruptedException, ExecutionException, TimeoutException {
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        
        // 创建一个Callable任务
        Callable<String> callableTask = new Callable<String>() {
            @Override
            public String call() throws Exception {
                // 模拟一个耗时的操作
                Thread.sleep(5000);
                return "操作完成";
            }
        };

        // 提交任务,并设置超时时间为3秒
        Future<String> future = executorService.submit(callableTask);
        String result = null;
        try {
            result = future.get(3, TimeUnit.SECONDS);
            System.out.println("操作结果:" + result);
        } catch (TimeoutException e) {
            // 超时异常处理
            System.out.println("操作超时");
        } finally {
            // 关闭ExecutorService
            executorService.shutdown();
        }
    }
}
Copier après la connexion

Dans l'exemple de code ci-dessus, nous avons créé un ExecutorService et soumis une tâche Callable à l'aide de sa méthode de soumission. Ensuite, utilisez la méthode get de Future pour définir le délai d'attente sur 3 secondes. Si la tâche n'est pas terminée dans les 3 secondes, une TimeoutException est levée. Enfin, nous captons l'exception de délai d'attente dans le bloc catch et la gérons.

  1. Utilisation des méthodes CompletableFuture et CompletableFuture.get

Une autre solution courante consiste à définir le délai d'attente en utilisant la classe CompletableFuture introduite dans Java 8 et sa méthode get.

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class TimeoutExample {
    public static void main(String[] args) throws InterruptedException, ExecutionException, TimeoutException {
        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
            try {
                // 模拟一个耗时的操作
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "操作完成";
        });

        String result = null;
        try {
            result = future.get(3, TimeUnit.SECONDS);
            System.out.println("操作结果:" + result);
        } catch (TimeoutException e) {
            // 超时异常处理
            System.out.println("操作超时");
        }
    }
}
Copier après la connexion

Dans l'exemple de code ci-dessus, nous utilisons la méthode supplyAsync de CompletableFuture pour exécuter une méthode Supplier (expression Lambda), qui simule une opération fastidieuse. Ensuite, nous utilisons la méthode get de CompletableFuture pour définir le délai d'attente à 3 secondes.

Que vous utilisiez ExecutorService et Future, ou que CompletableFuture, vous pouvez très bien résoudre le problème de l'exception de délai d'attente de concurrence Java. Dans les applications réelles, choisissez simplement la solution appropriée en fonction de scénarios et de besoins spécifiques.

Résumé

Cet article présente deux manières courantes de résoudre les exceptions de délai d'expiration de concurrence Java, en utilisant respectivement ExecutorService et CompletableFuture. Dans la programmation multithread, les exceptions de délai d'attente sont un problème courant qui doit être traité de manière raisonnable et des solutions appropriées doivent être sélectionnées en fonction des besoins réels. J'espère que cet article sera utile pour résoudre le problème de l'exception de délai d'attente de concurrence.

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 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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le dernier chef-d'œuvre du MIT : utiliser GPT-3.5 pour résoudre le problème de la détection des anomalies des séries chronologiques Le dernier chef-d'œuvre du MIT : utiliser GPT-3.5 pour résoudre le problème de la détection des anomalies des séries chronologiques Jun 08, 2024 pm 06:09 PM

Aujourd'hui, j'aimerais vous présenter un article publié par le MIT la semaine dernière, utilisant GPT-3.5-turbo pour résoudre le problème de la détection des anomalies des séries chronologiques et vérifiant dans un premier temps l'efficacité du LLM dans la détection des anomalies des séries chronologiques. Il n'y a pas de réglage fin dans l'ensemble du processus et GPT-3.5-turbo est utilisé directement pour la détection des anomalies. Le cœur de cet article est de savoir comment convertir des séries temporelles en entrées pouvant être reconnues par GPT-3.5-turbo et comment concevoir. des invites ou des pipelines pour laisser LLM résoudre la tâche de détection des anomalies. Permettez-moi de vous présenter une introduction détaillée à ce travail. Titre de l'article image : Largelangagemodelscanbezero-shotanomalydete

Comment la concurrence et le multithreading des fonctions Java peuvent-ils améliorer les performances ? Comment la concurrence et le multithreading des fonctions Java peuvent-ils améliorer les performances ? Apr 26, 2024 pm 04:15 PM

Les techniques de concurrence et de multithreading utilisant les fonctions Java peuvent améliorer les performances des applications, notamment en suivant les étapes suivantes : Comprendre les concepts de concurrence et de multithreading. Tirez parti des bibliothèques de concurrence et multithread de Java telles que ExecutorService et Callable. Pratiquez des cas tels que la multiplication matricielle multithread pour réduire considérablement le temps d'exécution. Profitez des avantages d’une vitesse de réponse accrue des applications et d’une efficacité de traitement optimisée grâce à la concurrence et au multithreading.

Application de la concurrence et des coroutines dans la conception de l'API Golang Application de la concurrence et des coroutines dans la conception de l'API Golang May 07, 2024 pm 06:51 PM

La concurrence et les coroutines sont utilisées dans la conception GoAPI pour : Traitement hautes performances : traiter plusieurs requêtes simultanément pour améliorer les performances. Traitement asynchrone : utilisez des coroutines pour traiter des tâches (telles que l'envoi d'e-mails) de manière asynchrone, libérant ainsi le thread principal. Traitement des flux : utilisez des coroutines pour traiter efficacement les flux de données (tels que les lectures de bases de données).

Exceptions de fonctions C++ et tests uniques : garantir la solidité du code Exceptions de fonctions C++ et tests uniques : garantir la solidité du code May 03, 2024 am 09:18 AM

La gestion des exceptions et les tests unitaires sont des pratiques importantes pour garantir la solidité du code C++. Les exceptions sont gérées via des blocs try-catch, et lorsque le code lève une exception, il passe au bloc catch. Les tests unitaires isolent les tests de code pour vérifier que la gestion des exceptions fonctionne comme prévu dans différentes circonstances. Cas pratique : La fonction sumArray calcule la somme des éléments du tableau et lève une exception pour gérer un tableau d'entrée vide. Les tests unitaires vérifient le comportement attendu d'une fonction dans des circonstances anormales, comme le lancement d'une exception std::invalid_argument lorsqu'un tableau est vide. Conclusion : en tirant parti de la gestion des exceptions et des tests unitaires, nous pouvons gérer les exceptions, empêcher le code de planter et garantir que le code se comporte comme prévu dans des conditions anormales.

Que faire si le délai de livraison des courses de Meituan expire_Comment gérer le délai de livraison des courses de Meituan Que faire si le délai de livraison des courses de Meituan expire_Comment gérer le délai de livraison des courses de Meituan Mar 28, 2024 am 09:26 AM

1. Tout d'abord, lorsque vous sortez de la nourriture, vous devez savoir si la commande est livrée par le commerçant lui-même ou par Meituan. De manière générale, l'efficacité de la réception des commandes par le commerçant est faible et des délais d'attente se produisent souvent. puisque Meituan n'est pas impliqué dans la livraison, il n'y a pas de principe de compensation. A ce moment, vous pouvez vérifier si la commande soumise contient une clause d'indemnisation pour les heures supplémentaires de livraison. S'il y a une clause pertinente dans la réclamation, il n'est pas nécessaire d'en dire plus, le commerçant réclamera la réclamation. S'il n'y a pas de règles pertinentes, il est recommandé de laisser un avis négatif ou de laisser un message sur le service de livraison de repas sur la plateforme, ou de contacter directement le commerçant pour vous plaindre du service de livraison afin de négocier une indemnisation si vous le pouvez vraiment. Si vous ne négociez pas, vous ne pouvez qu'admettre que vous n'avez pas de chance. Veuillez faire plus attention la prochaine fois. 2. Modèle de compensation des heures supplémentaires : le commerçant promet un délai de livraison et une remise, et reçoit le paiement de l'utilisateur

Exception de fonction C++ avancée : gestion personnalisée des erreurs Exception de fonction C++ avancée : gestion personnalisée des erreurs May 01, 2024 pm 06:39 PM

La gestion des exceptions en C++ peut être améliorée grâce à des classes d'exceptions personnalisées qui fournissent des messages d'erreur spécifiques, des informations contextuelles et effectuent des actions personnalisées en fonction du type d'erreur. Définissez une classe d'exception héritée de std::exception pour fournir des informations d'erreur spécifiques. Utilisez le mot-clé throw pour lancer une exception personnalisée. Utilisez Dynamic_cast dans un bloc try-catch pour convertir l'exception interceptée en un type d'exception personnalisé. Dans le cas réel, la fonction open_file lève une exception FileNotFoundException. La capture et la gestion de l'exception peuvent fournir un message d'erreur plus spécifique.

Comment la connexion à la base de données Java gère-t-elle les transactions et la concurrence ? Comment la connexion à la base de données Java gère-t-elle les transactions et la concurrence ? Apr 16, 2024 am 11:42 AM

Les transactions garantissent l'intégrité des données de la base de données, y compris l'atomicité, la cohérence, l'isolation et la durabilité. JDBC utilise l'interface Connection pour assurer le contrôle des transactions (setAutoCommit, commit, rollback). Les mécanismes de contrôle de concurrence coordonnent les opérations simultanées, à l'aide de verrous ou d'un contrôle de concurrence optimiste/pessimiste pour obtenir une isolation des transactions afin d'éviter les incohérences des données.

Comment implémenter la gestion des exceptions imbriquées en C++ ? Comment implémenter la gestion des exceptions imbriquées en C++ ? Jun 05, 2024 pm 09:15 PM

La gestion des exceptions imbriquées est implémentée en C++ via des blocs try-catch imbriqués, permettant de déclencher de nouvelles exceptions dans le gestionnaire d'exceptions. Les étapes try-catch imbriquées sont les suivantes : 1. Le bloc try-catch externe gère toutes les exceptions, y compris celles levées par le gestionnaire d'exceptions interne. 2. Le bloc try-catch interne gère des types spécifiques d'exceptions, et si une exception hors de portée se produit, le contrôle est confié au gestionnaire d'exceptions externe.

See all articles