inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

keepAliveTime - 스레드 유휴 시간 설정

[keepAliveTime - 스레드 유휴 시간 설정] - 설명에 대한 의문점

해결된 질문

516

식빵

작성한 질문수 56

1

안녕하세요 선생님, 강의를 듣다가 의문점이 드는 설명이 있어서 질문 올립니다.

[keepAliveTime - 스레드 유휴 시간 설정] 강의
03:56 ~ 04:20 의 설명을 듣고 나서 처음에는 끄덕였는데,
강의를 다 듣고 나니까 뭔가 의문점이 생겼습니다.

해당 시간대에 설명에서는 Thread.sleep(3000) 메소드가 유휴상태를 일으키고, 이것 때문에 keepAliveTime 에 의해서 쓰레드가 제거된다고 설명해주십니다.

이때 듣고 나서 아래와 같은 생각을 하게 되더라구요.

"그러면 Thread.sleep(3000) 을 하고, KeepAliveTime 을 2초를 줘서 정말 저 3초가 지나기 전에 쓰레드가 삭제되야 된다면 쓰레드가 제거되기 전에 InterruptedException 같은 걸 던지려나?"

... 라는 생각을 하게 되더라구요.
그리고 제가 한 테스트 결과는 그렇지 않더군요...

이상해서 이리저리 찾아보니 다음과 같은 설명을 jdk
소스 파일에서 발견했습니다.

 

여기서 제가 주목한 구절은
"Timeout in nanoseconds for idle threads waiting for work." 입니다.

이 말은 Thread 가 sleep 같은 상태에서 멈추더라도,
해당 Thread 는 "다음 일을 받기 위해서 대기하는 쓰레드" 가 아니기 때문에 keepAliveTime 에 의해서 제거되는 타겟이 아니지 않나요?

더 정확히는...

keepAliveTime 의 유휴시간은
==> Thread.sleep(3000) 에서 유휴시간 Check X
==> 쓰레드가 자기의 task 를 모두 끝난 직후부터 유휴시간 Check O

... 인 게 맞지 않나요?

java 동시성 multithread synchronisation

답변 1

1

정수원

네 맞습니다

정확한 것은 아무일도 하지 않는 대기하는 스레드 기준이 맞습니다

다만 강의에서 sleep 을 설명한 것은 대기개념을 표현하기 위해입니다

실제로는 모든 태스크가 완료되고 나서 아무일도 하지 않는 스레드를 기준으로 한 것이 맞고 이를 설명하는 과정에서 대기 스레드를 sleep 만큼 유휴시간을 가진다고 가정하고 메인스레드에서 각 스레드들의 결과를 보여주기 위함이라고 이해해 주시면 될 것 같습니다

유휴 시간 자체가 스레드의 idle 상태를 의미하므로 당연히 태스크가 종료됨을 가정하는 것이 맞습니다

멀티스레드 단일스레드

0

56

0

new Condition 부분 질문

0

83

1

13:00 강의 내용 이해 질문

0

99

1

강의 출시 질문 있습니다.

0

117

1

InterruptedExceptionThreadStopExample 질문입니다.

0

94

2

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

0

115

1

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

0

211

2

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

0

185

1

단일연산변수 api

0

125

0

synchronized 블럭과 메인메모리 반영

0

146

0

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

1

243

1

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

0

159

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

256

1

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

0

232

2