inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

생명 주기와 상태 & ThreadPoolExecutor 아키텍처 이해

쓰레드풀에서 쓰레드를 재사용할 수 있는 이유가 궁금합니다.

336

선종우

작성한 질문수 5

0

 

java 동시성 multithread synchronisation

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
선종우님, 스레드풀에서 쓰레드를 재사용할 수 있는 이유에 대해 궁금해하셨군요.

쓰레드를 시작하고 나서 해당 쓰레드가 완료된 후에는 start() 메소드를 통해 다시 시작할 수 없습니다. 이는 자바의 기본적인 쓰레드 사용 법칙이죠. 그러나 쓰레드풀에서는 쓰레드를 새로 생성하여 시작하는 대신에, 이미 시작된 쓰레드가 작업을 마쳤을 때 다른 새로운 작업을 할당받아 처리하는 방식으로 재사용합니다.

선종우님께서 말씀하신 대로, Workerrun 메소드 내부에서 runWorker 메소드를 실행하는 과정에서 실질적인 작업이 이루어지고, getTask()를 통해 계속해서 새로운 작업을 큐에서 꺼내어 실행하게 되는 구조입니다. 쓰레드가 실제로 완료되지 않고 큐에서 새로운 작업을 대기하는 형태로 인해 반복적으로 작업을 수행할 수 있는 것입니다.

만약 getTask()에서 할당할 작업이 없다면 쓰레드는 블록 상태로 전환되어 대기하게 되고, 새로운 작업이 큐에 등록되면 다시 활성화되어 작업을 수행합니다. 이렇게 작업 큐와 블록/대기 메커니즘을 통해 쓰레드풀은 쓰레드를 효율적으로 관리하고 재사용하는 것입니다.

선종우님의 결론이 쓰레드풀의 동작 방식에 대해 정확히 이해하고 계신 것으로 보입니다. 좋은 질문과 자세한 고민 공유해 주셔서 감사합니다. 추가로 궁금하신 점이 있다면 언제든지 질문해 주세요!

멀티스레드 단일스레드

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

186

1

단일연산변수 api

0

126

0

synchronized 블럭과 메인메모리 반영

0

147

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

178

1

synchronized = 모니터

0

285

2

Thread의 Context Switching 문의드립니다.

1

257

1

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

0

232

2