recherche
MaisonJavajavaDidacticielComment résoudre l'exception d'erreur de délai d'attente d'interruption du thread Java (ThreadInterruptedTimeoutErrorExceotion)

Comment résoudre lexception derreur de délai dattente dinterruption du thread Java (ThreadInterruptedTimeoutErrorExceotion)

Comment résoudre l'exception d'erreur de délai d'attente d'interruption du thread Java (ThreadInterruptedTimeoutErrorException)

Dans le processus de développement Java, nous utilisons souvent le multithreading pour améliorer les performances de concurrence et l'efficacité du programme. Cependant, lors de l'utilisation de threads, nous pouvons rencontrer certains problèmes, tels qu'une exception d'erreur de délai d'expiration du thread (ThreadInterruptedTimeoutErrorException). Cet article décrira comment résoudre ce problème et donnera des exemples de code correspondants.

  1. Analyse des causes d'exception
    La raison de l'exception d'erreur de délai d'attente du thread est généralement due au fait que le thread attend plus qu'un certain délai d'attente défini lorsqu'il attend le résultat d'une opération. En Java, on peut utiliser la méthode interruption() fournie par la classe Thread pour interrompre l'exécution d'un thread. Lorsque nous appelons cette méthode, le thread reçoit un signal d'interruption et a la possibilité d'effectuer un nettoyage et de terminer le thread.
  2. Solution
    Afin de résoudre l'exception d'erreur de délai d'attente du thread, nous pouvons utiliser la méthode suivante :

2.1 Utilisez la méthode join()
En Java, nous pouvons utiliser la méthode join() fournie par la classe Thread pour attendre pour la fin d'un fil. Cette méthode suspend le thread en cours jusqu'à ce que le thread sur lequel la méthode join() est appelée se termine ou expire. Nous pouvons définir un délai d'attente lors de l'appel de la méthode join(). Si le thread ne se termine pas dans le délai d'attente, on peut considérer qu'une exception d'erreur de délai d'attente du thread s'est produite. Voici un exemple de code simple :

Thread thread = new Thread(() -> {
    // 执行一些耗时的操作
});

thread.start();
thread.join(1000); // 设置超时时间为1秒

if (thread.isAlive()) {
    // 线程超时错误处理逻辑
    thread.interrupt(); // 中断线程
}

2.2 Utilisation des méthodes wait() et notify()
Une autre solution consiste à utiliser les méthodes wait() et notify() pour implémenter l'attente et le réveil des threads. Nous pouvons utiliser la méthode wait() dans le thread en attente pour définir un délai d'attente. Pendant l'attente, nous pouvons effectuer certaines opérations dans un autre thread. Lorsque l'opération est terminée, utilisez la méthode notify() pour notifier le thread en attente. Voici un exemple de code :

Object lock = new Object();
boolean isOperationComplete = false;

Thread waitingThread = new Thread(() -> {
    synchronized (lock) {
        try {
            lock.wait(1000); // 设置超时时间为1秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        if (!isOperationComplete) {
            // 线程超时错误处理逻辑
        }
    }
});

Thread executingThread = new Thread(() -> {
    // 执行一些操作
    synchronized (lock) {
        isOperationComplete = true;
        lock.notify();
    }
});

waitingThread.start();
executingThread.start();

2.3 Utilisation d'ExecutorService et Future
ExecutorService et Future en Java sont des classes d'outils utilisées pour gérer et contrôler les threads. Nous pouvons utiliser ExecutorService pour soumettre une tâche avec un délai d'attente et utiliser la méthode get() de Future pour obtenir les résultats de la tâche. Si la tâche n'est pas terminée dans le délai d'expiration, on peut considérer qu'une exception d'erreur de délai d'attente du thread s'est produite. . Voici un exemple de code :

ExecutorService executorService = Executors.newFixedThreadPool(1);
Future<?> future = executorService.submit(() -> {
    // 执行一些耗时的操作
});

try {
    future.get(1, TimeUnit.SECONDS); // 设置超时时间为1秒
} catch (InterruptedException | ExecutionException | TimeoutException e) {
    // 线程超时错误处理逻辑
    future.cancel(true); // 取消任务
}

executorService.shutdown();
  1. Résumé
    L'exception d'erreur de délai d'expiration du thread est l'un des problèmes courants lors de l'utilisation du multi-threading. Cet article décrit plusieurs solutions de contournement et fournit des exemples de code correspondants. En utilisant la méthode join(), les méthodes wait() et notify() ainsi que ExecutorService et Future, nous pouvons résoudre efficacement l'exception d'erreur de délai d'attente du thread et améliorer la stabilité et la fiabilité du programme.

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

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)
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

SublimeText3 version Mac

SublimeText3 version Mac

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

DVWA

DVWA

Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel