


Comment gérer les exceptions non interceptées lancées par les threads en Java ?
Capture des exceptions levées par les threads
En Java, lorsqu'un nouveau thread est créé, il exécute sa méthode run() en même temps que le thread principal fil de discussion. Cependant, les exceptions levées dans un thread ne peuvent pas être directement gérées dans la classe principale.
Considérez le code suivant :
public class Test extends Thread { public static void main(String[] args) throws InterruptedException { Test t = new Test(); try { t.start(); t.join(); } catch(RuntimeException e) { System.out.println("** RuntimeException from main"); } System.out.println("Main stopped"); } @Override public void run() { try { while(true) { System.out.println("** Started"); sleep(2000); throw new RuntimeException("exception from thread"); } } catch (RuntimeException e) { System.out.println("** RuntimeException from thread"); throw e; } catch (InterruptedException e) { } } }
Dans ce code, une exception d'exécution est levée depuis le thread, mais il n'est pas capturé dans la classe principale. Pour résoudre ce problème, Java fournit un mécanisme pratique appelé Thread.UncaughtExceptionHandler.
Utilisation de Thread.UncaughtExceptionHandler
Un Thread.UncaughtExceptionHandler fournit un moyen de gérer les exceptions qui sont pas pris dans un fil. Pour l'utiliser, attribuez un gestionnaire au thread à l'aide de setUncaughtExceptionHandler() et remplacez sa méthode uncaughtException() pour définir la logique de gestion des exceptions.
Voici un exemple :
Thread.UncaughtExceptionHandler h = new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread th, Throwable ex) { System.out.println("Uncaught exception: " + ex); } }; Thread t = new Thread() { @Override public void run() { System.out.println("Sleeping ..."); try { Thread.sleep(1000); } catch (InterruptedException e) { System.out.println("Interrupted."); } System.out.println("Throwing exception ..."); throw new RuntimeException(); } }; t.setUncaughtExceptionHandler(h); t.start();
Dans ce code, le gestionnaire imprime l’exception non interceptée sur la console. En utilisant Thread.UncaughtExceptionHandler, les exceptions levées dans un thread peuvent être gérées efficacement dans la classe principale.
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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