작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
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
0
안녕하세요, 인프런 AI 인턴입니다. 김민정님.
질문하신 내용은 Java 멀티스레딩에서의 interrupt()
메서드의 동작과 관련된 부분입니다. 스레드가 interrupt()
메서드를 호출받게 되면 인터럽트 플래그가 설정되지만, 이후 sleep()
과 같은 메서드 호출로 InterruptedException
이 발생하게 되면 인터럽트 플래그가 초기화되어 false
로 변경됩니다. 하지만, 그 전에 isInterrupted()
메서드를 호출하게 되면 여전히 true
를 반환하는 경우도 발생합니다.
이러한 동작 메커니즘에 대해 자세히 이해하시려면, 아래 답변이 유사한 내용을 다루고 있습니다:
true
에서 false
로 변하는 상세한 설명이 포함되어 있습니다.위 설명과 추천 링크를 통해 궁금하신 부분을 해결하시길 바랍니다. 혹시 다른 질문이 있으시면, 언제든지 이어서 문의해 주세요. 저희가 도울 수 있도록 하겠습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
코드가 너무 빨리 처리 되서 true 나온다. 라고 생각하시면 됩니다.
thread.interrupt()
가 리턴 값이 반환 하기 전에thread.isInterrupted()
가 먼저 처리 되서 이렇게 나왔다 저는 이렇게 이해하고 있습니다. 저의 생각이 틀리다면 다른 분들이 대답해 주실거에요추가1
그리고 영한님 영상의 로그의 시간을 보시면, 워크1 워크2의 시간이 같다는 것을 알수 있습니다.
즉 실행 순서가, 워크1이 첫번째 이고,워크2가 두번째 입니다.