작성
·
28
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.
아래 부분처럼 interrupt() 사용해서 수정했는데
잘 작동하는데 이건 잘못된 코드 일까요..?
while문도 try() catch() 문 안에 넣으면 안될까요 ..?
@Override
public void run() {
try {
while (true) {
if (jobQueue.isEmpty()) {
continue;
}
String job = jobQueue.poll();
log("출력 시작: " + job + ", 대기 문서: " + jobQueue);
Thread.sleep(3000);
log("출력 완료: " + job);
}
} catch (InterruptedException e) {
log("interrupt!");
log("프린터 종료");
}
}
답변 1
0
안녕하세요. 혜진님
이렇게 변경하면 이제 인터럽트는 Thread.sleep()
을 호출하는 시점에서만 유효하게 처리됩니다. 즉, sleep()
중이 아닐 때 인터럽트가 들어오면 해당 인터럽트는 sleep()
호출 시 반영되지 않고, Thread.currentThread().interrupt()
플래그만 세팅된 상태로 다음 sleep()
에서 예외가 발생합니다. 만약 sleep()
와 같은 인터럽트 가능한 메서드 호출이 없는 코드를 실행하고 있다면, while(true)
는 여전히 계속됩니다.
감사합니다.