작성
·
229
·
수정됨
0
안녕하세요. 김영한님의 강의 잘 보고 있습니다.
바보 같은 질문일 수 있지만, Thread.sleep()과는 다르게 LockSupport.park()는 interrupt()를 이용해서 깨어나도 isInterrupted()가 true인 이유가 궁금합니다.
그냥 단순히 InterruptedException이 발생하지 않기 때문일까요?
답변 1
0
LockSupport.park()는 WATING 상태로 바뀝니다. 이때 interrupt()을 사용하면 WAITING 상태에서 RUNNABLE 상태로 변하고 여전히 interrupted는 true인 상태입니다.
그래서 나중에 sleep과 같은 InterruptedException을 던지는 메소드를 만나면 그때서야 예외를 반환합니다.
감사합니다.
안녕하세요, 인프런님. 친절한 답변 감사드립니다.
제가 궁금했던 점은,
main
스레드에서interrupt
신호를 사용해LockSupport.park()
상태의 스레드를 깨웠을 때,isInterrupted()
메서드의 결과가false
여야 한다고 생각했는데, 실제로는true
인 이유입니다.제 상식으로는, 이 경우
isInterrupted()
가false
여야 하는데, 만약 그렇지 않다면flag
변수를 직접 조작하여interrupt
를 구현했던 것 처럼isInterrupted()
값을 조정해야 하는 불편함이 있을 것이라고 생각했습니다.이 부분은 구현한 사람의 의도일 수도 있다는 생각이 들었고, 혹시 다른 이유가 있나 싶어서 질문을 드리게 되었습니다. 사실, 바보 같은 질문이긴 합니다 ㅎㅎ.