인프런 커뮤니티 질문&답변

강동현님의 프로필 이미지

작성한 질문수

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

LockSupport.park()의 isInterrupted() 질문

24.08.08 04:03 작성

·

223

·

수정됨

0

안녕하세요. 김영한님의 강의 잘 보고 있습니다.

바보 같은 질문일 수 있지만, Thread.sleep()과는 다르게 LockSupport.park()는 interrupt()를 이용해서 깨어나도 isInterrupted()가 true인 이유가 궁금합니다.

그냥 단순히 InterruptedException이 발생하지 않기 때문일까요?

답변 1

0

인프런님의 프로필 이미지

2024. 08. 08. 14:02

LockSupport.park()는 WATING 상태로 바뀝니다. 이때 interrupt()을 사용하면 WAITING 상태에서 RUNNABLE 상태로 변하고 여전히 interrupted는 true인 상태입니다.

그래서 나중에 sleep과 같은 InterruptedException을 던지는 메소드를 만나면 그때서야 예외를 반환합니다.

감사합니다.

강동현님의 프로필 이미지
강동현
질문자

2024. 08. 09. 22:30

안녕하세요, 인프런님. 친절한 답변 감사드립니다.

제가 궁금했던 점은, main 스레드에서 interrupt 신호를 사용해 LockSupport.park() 상태의 스레드를 깨웠을 때, isInterrupted() 메서드의 결과가 false여야 한다고 생각했는데, 실제로는 true인 이유입니다.

제 상식으로는, 이 경우 isInterrupted()false여야 하는데, 만약 그렇지 않다면 flag 변수를 직접 조작하여 interrupt 를 구현했던 것 처럼 isInterrupted() 값을 조정해야 하는 불편함이 있을 것이라고 생각했습니다.

이 부분은 구현한 사람의 의도일 수도 있다는 생각이 들었고, 혹시 다른 이유가 있나 싶어서 질문을 드리게 되었습니다. 사실, 바보 같은 질문이긴 합니다 ㅎㅎ.