inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]

스레드 중지 – flag variable vs interrupt() - 2

InterruptedExceptionThreadStopExample 질문입니다.

94

osk2090

작성한 질문수 6

0

InterruptedExceptionThreadStopExample 를 돌리면 강의 로그에서는

=============
중단 스레드가 작업 스레드를 중단 시켰습니다.

인트럽트 상태 1 : true

=============

형태가 찍히는데 제 로컬에서는

=============

중단 스레드가 작업 스레드를 중단시켰습니다.

인트럽트 상태 2 : false

=============

가 찍히는데 이건 확률적으로 로그가 찍히는 걸까요? 답변 부탁 드립니다!

java 동시성 multithread synchronisation

답변 2

0

정수원

인터럽트 상태 1번이 false 가 찍히고 있는데요?

인트럽트가 아직 걸린 상태가 아니기 때문에 false 가 맞습니다

메인 스레드가 1초 후에 워커 스레드를 인터럽트하고 있고 워커스레드는 0.5 초 단위로 반복하기 때문에 첨부터 true 가 나올 수 없습니다

예제 소스를 올려 주시겠어요?

0

인프런 AI 인턴

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

InterruptedException과 관련된 스레드 실행 순서가 시간이 경과하면서 달라질 수 있습니다. 이 때문에 로컬 환경에서 실행 결과가 강의에서 보여지는 것과 다른 결과를 출력하는 경우가 발생할 수 있습니다. 핵심은 스레드가 중단(interrupt)된 후의 상태와 이 상태를 어떻게 확인하는지에 대한 내용입니다.

기본적으로 스레드를 interrupt하면 해당 스레드의 인터럽트 상태가 true로 설정됩니다. 그러나, InterruptedException이 발생하면 이 상태를 다시 초기화(false)할 수 있습니다. 그로 인해 프로그램의 실행 상황에 따라 인터럽트 상태가 false로 보일 수 있습니다.

스레드의 로그가 다르게 출력되는 이유는 몇 가지가 있을 수 있습니다:
1. 타이밍 문제: 두 스레드 간의 타이밍 차이로 인해 인터럽트 상태가 로그에 반영되기 전에 reset될 수 있습니다.
2. 스레드의 상태 확인: 로그가 찍히는 시점에서 인터럽트 상태를 다시 확인하면서 상태가 초기화되었을 가능성도 배제할 수 없습니다.
3. 환경 차이: 컴퓨터 환경에 따라 스레드의 스케줄링이 달라질 수 있습니다.

관련해서 자세하고 유사한 논의를 다룬 게시물이 있는데 확인해 보시면 도움이 될 것 같습니다:
- 스레드 중지 – flag variable vs interrupt() - 2 강의에서 질문
- ExecutorService API - 스레드 풀 중단 및 종료 - 2 강의 내 질문

이해를 돕기 위해 가능하다면, 코드 상에서 스레드의 인터럽트 상태를 직접 확인하는 추가 로그를 넣어보시면 변화를 파악하는 데 유용할 수 있습니다.

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

멀티스레드 단일스레드

0

56

0

new Condition 부분 질문

0

81

1

13:00 강의 내용 이해 질문

0

99

1

강의 출시 질문 있습니다.

0

114

1

instance.getMyField()의 값이 왜 다른가요?

0

115

1

해당 강의 내용 무단 도용 신고

0

211

2

Thread Waiting 상태 관련 질문 드립니다.

0

182

1

단일연산변수 api

0

125

0

synchronized 블럭과 메인메모리 반영

0

146

0

실무에서 자바가 제공하는 락을 사용하는 경우

1

243

1

뮤텍스나 세마포어는 busy waiting이 없는 게 맞을까요?

0

157

1

16:50부분에서 타입락 질문드립니다.

0

110

2

16분 7초 뮤텍스 코드 관련해 질문드립니다.

0

160

2

동기화가 보장된다고 하더라도 스레드간 데이터 불일치가 발생할 수 있지 않나요??

0

199

2

리액티브-part2

0

180

2

문자열 풀 값을 이용한 String 변수

0

207

2

스레드 라이브러리는 커널과 같은 역할을 하지 못하나요?

0

173

1

자식 프로세스를 쓰는 이유

0

186

1

커널 모드 전환시 질문이 있습니다!

0

146

1

[공유] setName 시 threadName이 1부터 시작하는 이유

0

177

1

synchronized = 모니터

0

285

2

Thread의 Context Switching 문의드립니다.

1

254

1

동기 & 논블록킹 질문 드립니다.

0

231

2

AtomicIntegerGetAndUpdateExample 예시가 부자연스럽습니다.

0

151

1