자바 스레드 학습 노트 (2) 스레드 이상 처리

2530 단어 java 스레드
스레드 캡처 예외:
상황에서 우리는main() 방법에서 라인의 이상을 포착하지 못한다. 비례는 다음과 같다.
public class ExceptionThread implements Runnable{
    @Override
    public void run() {
        throw new NullPointerException();
    }

    public static void main(String[] args) {
        ExecutorService executorService = Executors.newCachedThreadPool();
        try {
            System.out.println("    ");
            executorService.execute(new ExceptionThread());
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("    ");
        }
    }
}

상술한 코드는main방법에서 루틴 이상을 포착할 수 없다. 그러면 우리는 어떻게 루틴의 이상 정보를 포착할 수 있을까?
다음은 이 코드를 보도록 하겠습니다.
/**
 *         
 */
class MyExceptionThread implements Thread.UncaughtExceptionHandler {
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        //               
        System.out.println("           ");
        System.out.println(e);
    }
}

/**
 *         
 */
class ExceptionThreadFactory implements ThreadFactory {
    @Override
    public Thread newThread(Runnable r) {
        Thread thread = new Thread(r);
        //           。
        thread.setUncaughtExceptionHandler(new MyExceptionThread());
        return thread;
    }
}

/**
 *     
 */
class ExceptionThread2 implements Runnable{
    @Override
    public void run() {
        try {
            Thread.sleep(1000l);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //     
        throw new NullPointerException();
    }

    public static void main(String[] args) {
        //         ExceptionThreadFactory    ,     
        ExecutorService executorService = Executors.newCachedThreadPool(new ExceptionThreadFactory());
        try {
            System.out.println("    ");
            //       
            executorService.execute(new ExceptionThread2());
            executorService.execute(new ExceptionThread2());
            executorService.execute(new ExceptionThread2());
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("    ");
        }
    }
}

위의 출력 결과는
    
           
java.lang.NullPointerException
           
java.lang.NullPointerException
           
java.lang.NullPointerException

결론은main()이라는 방법은 여전히 이상한 라인을 포착하지 못했다. 물론 이 설정은 합리적이다.현재 각 라인마다 자신의 이상 처리 메커니즘이 있는데 어떡하지, 문장, 하나의 라인을 만들 때 이 문장은 좋다~
일을 마치다.

좋은 웹페이지 즐겨찾기