인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

작성자 없음

작성자 정보가 삭제된 글입니다.

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

인터럽트 - 시작2

interrupt() 호출 후 출력 결과 질문있습니다. 확인 부탁드립니다!!!!

작성

·

66

·

수정됨

0

처음 예제 작성했을 때 출력 결과가 이렇게 나왔었는데, (강의 5분 10초, 10분 50초 참고)

work] 작업 중
work] 작업 중
main] 작업 중단 지시 thread.interrupt()
work] work 스레드 인터럽트 상태2 = false
main] work 스레드 인터럽트 상태1 = true

work] interrupt message=sleep interrupted
work] state=RUNNABLE
work] 자원 정리
work] 작업 종료

이 상황에서는 main스레드에서 interrupt() 후 바로 work 스레드가 예외 처리해서 work 스레드의 인터럽트 플래그가 false 로 됐다는 걸 확인할 수 있습니다. 하지만 그 이후 main스레드에서 work 스레드의 인터럽트 플래그가 true가 출력되었는데 어떻게 false가 아닌 true가 출력될 수 있는지 궁금합니다.

답변 2

0

김민정님의 프로필 이미지

삭제된 글입니다

생각하는자님의 프로필 이미지

코드가 너무 빨리 처리 되서 true 나온다. 라고 생각하시면 됩니다.
thread.interrupt() 가 리턴 값이 반환 하기 전에 thread.isInterrupted()가 먼저 처리 되서 이렇게 나왔다 저는 이렇게 이해하고 있습니다. 저의 생각이 틀리다면 다른 분들이 대답해 주실거에요

추가1

그리고 영한님 영상의 로그의 시간을 보시면, 워크1 워크2의 시간이 같다는 것을 알수 있습니다.

즉 실행 순서가, 워크1이 첫번째 이고,워크2가 두번째 입니다.

 

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 김민정님.

질문하신 내용은 Java 멀티스레딩에서의 interrupt() 메서드의 동작과 관련된 부분입니다. 스레드가 interrupt() 메서드를 호출받게 되면 인터럽트 플래그가 설정되지만, 이후 sleep()과 같은 메서드 호출로 InterruptedException이 발생하게 되면 인터럽트 플래그가 초기화되어 false로 변경됩니다. 하지만, 그 전에 isInterrupted() 메서드를 호출하게 되면 여전히 true를 반환하는 경우도 발생합니다.

이러한 동작 메커니즘에 대해 자세히 이해하시려면, 아래 답변이 유사한 내용을 다루고 있습니다:

  1. 인터럽트-시작2, 인터럽트 상태 질문이요
    • 원본 URL을 살펴보시면 인터럽트의 동작 방식과 인터럽트 상태가 true에서 false로 변하는 상세한 설명이 포함되어 있습니다.

위 설명과 추천 링크를 통해 궁금하신 부분을 해결하시길 바랍니다. 혹시 다른 질문이 있으시면, 언제든지 이어서 문의해 주세요. 저희가 도울 수 있도록 하겠습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기