Détecter les exceptions des threads en Java
Dans les applications multithread, la gestion des exceptions lancées dans différents threads peut être un défi. Considérons un scénario dans lequel une classe principale initie un nouveau thread et tente d'intercepter toutes les exceptions d'exécution générées par celui-ci.
// Original Code public class CatchThreadException { public static void main(String[] args) throws InterruptedException { Thread t = new Thread() { @Override public void run() { throw new RuntimeException("Exception from thread"); } }; try { t.start(); t.join(); } catch (RuntimeException e) { System.out.println("** RuntimeException from main"); } System.out.println("Main stopped"); } }
Dans ce code, le thread principal attend que le thread enfant se termine à l'aide de join(). méthode. Cependant, lorsque le thread enfant lève une exception, le thread principal ne l'attrape pas.
Gestionnaire d'exceptions non capturées pour les threads
Pour résoudre ce problème, Java fournit un thread .Interface UncaughtExceptionHandler. En implémentant cette interface et en l'attribuant à un thread, vous pouvez gérer les exceptions non interceptées lancées dans ce thread.
// Using Uncaught Exception Handler public class CatchThreadException { public static void main(String[] args) throws InterruptedException { 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() { throw new RuntimeException("Exception from thread"); } }; t.setUncaughtExceptionHandler(h); t.start(); t.join(); System.out.println("Main stopped"); } }
Dans ce code modifié :
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!