>Java >java지도 시간 >Java의 스레드에서 발생한 예외를 어떻게 잡을 수 있습니까?

Java의 스레드에서 발생한 예외를 어떻게 잡을 수 있습니까?

DDD
DDD원래의
2024-12-04 00:26:10876검색

How Can I Catch Exceptions Thrown by Threads in Java?

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");
    }
}

수정된 코드에서는

  1. 다음의 새 인스턴스를 생성합니다. UncaughtExceptionHandler.
  2. setUncaughtExceptionHandler()를 사용하여 UncaughtExceptionHandler를 하위 스레드에 할당합니다. method.
  3. 자식 스레드 내에서 포착되지 않은 예외가 발생하면 핸들러의 uncaughtException() 메소드가 호출되어 예외를 정상적으로 처리할 수 있습니다.

위 내용은 Java의 스레드에서 발생한 예외를 어떻게 잡을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.