목차
접기
728x90
반응형
package com.sbs.practice.controller;
import org.springframework.stereotype.Controller;
@Controller
public class PracticeController
{
public static void main(String[] args)
{
System.out.println("sleep 실행전");
try
{
Thread.sleep(2000);
}
catch(InterruptedException e)
{
e.printStackTrace();
System.out.println(e.getMessage());
}
System.out.println("sleep 실행 후");
}
}
- 위의 코드를 실행하면 "sleep 실행전"이 출력되고 2초 후에 "sleep 실행 후"가 출력된다.
보통 우리는 이런 컴파일러의 불평을 잠재우기 위해
try-catch 문으로 감싸주고,
catch 블록에서 잡힌 InterruptedException은 무시한다.
매번 try-catch 문을 쓰기 싫어하는 개발자는 아래와 같이
예외를 무시하는 헬퍼 메서드를 만들어 사용할 수도 있다.
하지만 무작정 예외를 무시하는 것은 좋지 않은 방법이다.
이 예외는 항상 적절히 처리되어야 한다.
Java Thread의 interrupt 메커니즘
- InterruptedException은 자바 스레드의 인터럽트 메커니즘의 일부이다.
- 자바에서는 스레드에
하던 일을 멈추라는 신호를 보내기 위해
인터럽트를 사용한다. - 어떤 스레드를 인터럽트 하고 싶으면 대상 스레드의 Thread.interrupt() 메서드를 호출하면 된다.
- 그러면 대상 스레드에서는 아래 중 하나의 일이 일어나게 된다.
1. 현재 스레드가 대상 스레드를 수정할 수 있는 권한이 없으면 SecurityException이 발생한다.
2. 대상 스레드가 Object.wait(), Thread.sleep(), Thread.join(), Future.get(), BlockingQueue.take() 등의 메서드에 의해 블로킹된 경우, interrupt state가 사라지고 InterruptedException이 발생한다.
3. 대상 스레드가 InterruptibleChannel을 이용한 I/O 작업에 의해 블로킹된 경우, interrupt state가 설정되고 ClosedByInterruptException이 발생한다.
4. 대상 스레드가 Selector에서 블로킹된 경우, interrupt state가 설정되고 selection 작업에서 리턴된다.
5. 이외의 경우에는 interrupt state가 설정된다.
InterruptedException e
e.printStackTrace();
- 에러 메세지의 발생 근원지를 찾아서 단계별로 에러를 출력한다.
- printStackTrace를 사용자한테 보여주게 되면 서비스 이용중에 굉장한 불편을 겪게 된다.
그러므로 모든 에러 메세지를 출력하는게 아닌 e.getMessage()를 출력해 보이는게 낫다.
728x90
반응형
LIST
'Java' 카테고리의 다른 글
[ java ] sts 설치 (version: sts-4.9.0) (0) | 2021.02.07 |
---|---|
[ java ] Duration.ofSeconds, Duration.ofMillis 사용법 (0) | 2021.01.05 |
[ java ] 자바에서 ip 조회 (0) | 2020.12.30 |
[ java ] 자바에서 SHA256으로 hashing 하는 방법 (0) | 2020.12.30 |
[ java ] enum 사용법 (final static String 변수 대신 사용) (0) | 2020.12.30 |