inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Future2 - 분석

BlockingQueue에 Task 가 없어요

393

JHS

작성한 질문수 5

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
ExecutorService.submit 시점에 디버깅을 걸어서 확인해보니 BlockingQueue 필드인 workQueue 내부에 task가 들어가지 않고 workers라는 HashSet에 들어가지는 것 같습니다

 

혹시 제가 어디서 놓친건지 모르겠어서 여쭤봅니다

 

이거 때문에 계속 헷갈려요..ㅜ

java 객체지향 동시성 multithread thread

답변 2

1

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
JHS님께서 질문하신 내용을 잘 읽어보았습니다. 우선적으로 ExecutorService와 BlockingQueue를 사용할 때의 동작에 대해 간단히 설명드리겠습니다.

ExecutorService는 Java에서 여러 스레드를 관리하고 작업을 할당하기 위해 사용됩니다. 이때 사용되는 BlockingQueue는 작업이 대기하는 저장 공간입니다. 그러나 일반적인 경우, submit한 작업(task)은 일시적으로 BlockingQueue에 들어가고, 바로 worker 스레드가 작업을 처리하기 위해 가져가므로, 디버깅 시점에 task가 보이지 않을 수 있습니다. 이는 정상적인 동작입니다.

workers라는 HashSet은 현재 작업 중인 스레드와 연관된 자료 구조이며, 각 작업이 처리되기 위해 스레드 풀의 worker에 할당되면 작업은 workQueue에서 사라집니다.

아래 링크에서 유사한 사례에 대한 답변을 찾아볼 수 있습니다:
- ExecutorService와 BlockingQueue의 동작 이해하기

해당 답변에서는 “작업이 Queue에 들어가지 않고 바로 처리되는 경우”라는 상황을 다루고 있으니 JHS님께 도움이 될 것입니다.

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

0

JHS

추가로 자답입니다

 

Callable을 많이 만들어서 submit을 진행해보니 queue에 쌓이는 것을 확인했습니다

 

poolSize보다 작으면 바로 thread를 만들어서 실행하고 넘어가야지 queue에 들어가는 걸로 확인했습니다

당연히 바로 queue에 들어갈 줄 알았는데 아닌것 같은데 맞나요?

1

김영한

안녕하세요. JHS님

  1. 스레드풀과 Executor 프레임워크2 -> Executor 스레드 풀 관리 - 분석에서 해당 내용을 자세히 설명합니다 🙂

core 사이즈 만큼 없다면 스레드를 하나 생성하는데, 이때 작업을 큐에 넣을 필요가 없기 때문에 해당 스레드가 바로 작업을 처리하게 됩니다.

Executor 스레드 풀 관리 - 분석 부분을 복습해주세요 🙂

감사합니다.

모니터와 synchronized, ReentrantLock, 원자적연산 CAS관련해서 추가적으로 더 깊게 공부했는데 제가 이해한 것이 맞나요??

0

85

1

Future cancel기능을 사용했지만 interrupt가 발생하지 않을 때 어떻게 처리해야하나요?

0

73

2

2.스레드 생성과 실행 - 17P 그림 문의

0

74

2

자바 동시성 현업에서 사용예시가 궁금합니다

0

136

1

ReentrantLock 동작 원리에 대한 질문입니다.

0

84

1

synchronized 대신 join 을 사용하여 순서를 보장할 경우 해법이 아닌가요?

0

94

2

메모리 가시성 문제 질문

0

72

1

Future4-이유 질문

0

64

1

오타 제보

0

76

2

runnable 질문

0

95

2

자바가 아닌 다른 언어에서도

0

112

1

메모리 가시성 문제가 발생하는 이유

0

125

1

데몬스레드가 어떨 때 사용이 되는지 궁금합니다.

0

78

1

Future.cancel() 취소를 사용하는 예가 궁금합니다.

0

84

1

synchronized 와 인스턴스의 lock

0

91

2

synchronized 키워드만으로 메모리 가시성이 해결되는 이유가 궁급합니다.

0

63

1

[스레드 풀과 Executor 프레임워크1][문제와 풀이] `log("일부 작업이 실패했습니다.");` 실행되는 경우가 있을까요?

0

59

1

원자적 연산이 멀티스레드 상황에서 안전한 이유를 제대로 이해했는지 확인 부탁드립니다

0

67

2

자바 고급 1,2,3편 같이 진행해도 문제없나요

0

77

2

CPU 캐시 때문에도 잔액이 200원이 될 수 있나요?

0

105

2

synchronized 메서드와 join 관련 질문이 있습니다.

0

69

2

섹션 14. 115번 강의 내용 질문

0

83

2

교안에 있는 7페이지 데이터 영역

0

51

1

Executor 스레드 풀 관리 질문

0

108

2