하나 : 왜 멀티 스레드 비정상 캡처에 대해 이야기하고 싶습니까?
먼저 예를 살펴 봅니다.
공개 클래스 스레드 렉싱은 runnable {@override public void run () {throw new runtimeexception ();} : 콘솔은 일정 기간 동안 비정상적인 정보를 인쇄했습니다. 스레드 실행 명령문은 Try-Catch 블록에 배치되며 H (runtimeexception e) {System.out.println ( "예외는 처리되었습니다!");}}.런타임 이상은 메인에서 시작된 스레드에서 수동으로 던져졌으며, Catch Statement 블록의 이상을 포착하고 문장을 인쇄했습니다. 실행 결과는 다음과 같습니다.
이상이 콘솔에 던져졌으며 캐치 블록의 진술은 인쇄되지 않은 것으로 밝혀졌습니다.
결론 : 다중 스레드 작업은 이상을 실행하는 과정에서 이상을 처리 할 수 없습니다. 비정상적인 탈출, 작업은 작업에서 벗어납니다.
그렇다면, 우리는 멀티 스레드에서 이상을 포착하는 방법에 대해 생각해야합니까?
2. 멀티 스레드에서 이상을 포착합니다
아래 단계를 따라 실험을 완료합시다.
1. 예외 프로세서를 정의합니다
다음과 같이 다음과 같이 incaughtexception의 스레드를 구현해야합니다.
/ * * 1st 단계 : 스레드 비정상 프로세서 사양 * real.uncaughtexceptionHandler 사양을 준수하는 "비정상 프로세서"를 정의합니다. * / class myuncaUgeptionHandler implement and { / * * thread.uncaughtexception handler.uncugexception () uncnorceception ()는 비정규 성의 캡처가 나옵니다. 거의 죽었을 때 호출됩니다*/ @override public void uncaughtexception (스레드 t, Throwable e) {System.out.println ( "catch"+e);}}}2.이 비정상 프로세서를 사용하여 스레드 공장을 정의하십시오
/** 2 단계 : 스레드 공장을 정의하십시오* 스레드 공장을 스레드에 첨부하고 비정상적인 프로세서에 스레드를 바인딩합니다. Println (새 스레드 생성); = "+t.getUncaughtexcegeptionler ()); return t;}}
3. 예외를 던지기위한 작업을 정의하십시오.
/ * * 우리의 작업은 AD ()를 던질 수 있습니다. 새로운 runtimeexception () 던지기 ();}} 던지기
4. 실험에 전화하십시오
/** 4 단계 : 스레드 공장을 사용하여 스레드 풀을 만들고 실행 방법*/public class threadexceptionuncturegtexceptionHandler {public static void main (string [] args) {executorser vice = executors.newCachedThreadPool (new hanldrtyreadfactory (new hanldrtyreadfactory) ); exec .Execute (new ExceptionThread ());}}실행 결과는 다음과 같습니다.
3. 결론
Java의 다중 스레드 스레드에 의해 생성 된 이상을 캡처하려면 비정상적인 프로세서를 사용자 정의하여 해당 스레드 공장으로 설정해야합니다 (즉, 1 단계 및 두 번째 단계).
넷째, 확장
코드의 어느 곳에서나 동일한 비정상 프로세서가 사용된다는 것을 알고 있다면 더 간단한 방법은 스레드 클래스에서 정적 도메인을 설정 하고이 프로세서를 기본 불만족스러운 프로세서로 설정하는 것입니다.
이 프로세서는 스레드가없는 적절한 불만족스러운 프로세서 없이만 호출됩니다.
public static void main (string [] args) {strook.setDefaultunctexceptionHandler (new myuncaugexceptionHandler ());위는이 기사에서 잘못된 장소가 있다면 다중 스레드 다중 스레드 멀티 스레딩의 비정상적인 캡처의 모든 내용입니다.