게시 한 코드가 run() 메소드 내에있는 경우 예외가 발생할 때마다 간단히 반환하여 스레드를 완료하고 뒤 따르는 코드 실행을 피할 수 있습니다.
code...
try {
code...
} catch (Exception e) {
e.printStackTrace();
return;
}
code...
예외가 발생할 때마다 플래그를 설정하고 해당 플래그를 주기적으로 검사하여 스레드가 계속 실행되어야 하는지를 결정할 수도 있습니다.
bool isCanceled = false;
void run() {
while (!isCanceled) {
doSomeWork();
}
}
void doSomeWork() {
try {
code...
} catch (Exception e) {
e.printStackTrace();
isCanceled = true;
return;
}
}
물론 위의 명령문에 의존하는 모든 명령문이 try 블록 내에 포함되도록 코드를 구성 할 수도 있습니다. 예외가 발생하면 제어 흐름이 catch 블록으로 전송되고 문제가되는 줄 다음에 오는 try 블록 내의 명령문은 실행되지 않습니다. 나는 이것이 내부의 모든 코드를 가진 "큰 시도"에 의한 것이라고 가정합니다.
code...
try
code...
try // this try won't be executed if the line above it throws an exception
code...
catch {
printexception
return
}
code..
catch {
printexception
return // return early
}
code....
첫 번째 예외가 발생할 때 스레드를 죽이지 않는 이유는 무엇입니까? –