Java의 스레드에서 예외 잡기
멀티 스레드 애플리케이션에서는 서로 다른 스레드 내에서 발생한 예외를 관리하는 것이 어려울 수 있습니다. 메인 클래스가 새 스레드를 시작하고 그에 의해 생성된 런타임 예외를 포착하려고 시도하는 시나리오를 생각해 보세요.
// 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"); } }
이 코드에서 메인 스레드는 Join()을 사용하여 하위 스레드가 완료될 때까지 기다립니다. 방법. 그러나 하위 스레드가 예외를 발생시키면 기본 스레드는 이를 포착하지 않습니다.
잡히지 않은 스레드용 예외 처리기
이 문제를 해결하기 위해 Java는 스레드를 제공합니다. .UncaughtExceptionHandler 인터페이스. 이 인터페이스를 구현하고 스레드에 할당하면 해당 스레드 내에서 발생하는 포착되지 않은 예외를 처리할 수 있습니다.
// 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"); } }
수정된 코드에서는
위 내용은 Java의 스레드에서 발생한 예외를 어떻게 잡을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!