inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

BlockingQueue의 offer, poll 질문 드립니다.

184

FWoody

작성한 질문수 4

0

안녕하세요! 너무 알찬강의 잘 듣고 있습니다!

 

강의에서 BlockingQueue의 offer와 poll은 일정시간만큼 대기하신다고 하셨는데요,

이때 이들이 기다리는 영역은 어디가 되는건가요..?

  1. ReentrantLock을 획득하기 위한 대기

  2. wait()을 위한 대기

     

아니면 그 어느것도 상관없이 항상 대기 Queue가 된 후 2초인걸까요?!

 

그리고 만약 어떤 상황이든 2초만을 기다리고 종료시키는 방법이라면, Lock을 획득하고, 생산자나 소비자가 무언가 데이터를 처리하는 과정에서 2초가 지났을 때 이 작업을 강제 종료해 버리면 동일하게 동시성 문제가 발생할 수 있지 않을까요?

(실제 처리하지 않았지만 실패로 결과가 나타난다던가..)

java 객체지향 동시성 multithread thread

답변 2

0

김영한

안녕하세요. Hoin Kim님

AI 인턴이 잘 답변해주었는데요.

추가로 저희가 스스로 구현한 BoundedQueue를 어떻게 발전시켜왔는지 복습해보시면 BlockingQueue가 어떤 매커니즘으로 작동하는지 쉽게 이해하실 수 있을거에요 🙂

(그렇다면 여기서는 Lock(ReentrantLock)을 사용하겠지요?)

 

추가로 2초만 기다리고 나가는 상황은 결과적으로 BlockingQueue에 영향을 주지는 않습니다. 데이터를 넣지도, 빼지도 못하는 상황이니까요. 따라서 동시성에 문제를 주는 것은 아닙니다. 물론 예외 상황에 따른 별도의 처리는 필요하겠지요?

감사합니다.

0

인프런 AI 인턴

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

BlockingQueue에서 offerpoll 메서드를 사용할 때의 대기 관련 질문에 대해 답변 드리겠습니다.

BlockingQueue의 offerpoll 메서드는 일정 시간 동안 요소를 추가하거나 제거할 수 없는 경우 대기 시간이 지나면 메서드가 종료됩니다. 이때의 대기는 주로 두 가지 상황에서 발생합니다:

  1. ReentrantLock을 획득하기 위한 대기:

    • ReentrantLock은 동시성 제어를 위해 사용되는 락입니다. 만약 락이 다른 스레드에 의해 점유되고 있다면, 해당 락을 얻기 위해 대기할 수 있습니다.
  2. 대기 큐에서의 대기:

    • 큐가 가득 찼을 때 offer를 사용하는 경우, 큐가 비워질 때까지 대기합니다.
    • 큐가 비어 있을 때 poll을 사용하는 경우, 큐에 아이템이 들어올 때까지 대기합니다.

시간이 지나도록 큐 상태가 변화하지 않으면 메서드는 반환되고, 호출자는 실패를 처리할 수 있습니다. 즉, ReentrantLock의 획득을 위한 대기 중일 수도 있고, 대기 큐에서의 상태 변화 대기일 수도 있습니다.

두 번째 질문에 대해서는, 대기 시간이 지나더라도 강제적으로 실행 중인 작업을 종료시키지 않습니다. 대기가 끝난 경우 해당 메서드는 실패로 간주되어 호출자는 적절한 조치를 취할 수 있습니다. 실제 데이터의 불일치나 동시성 문제는 발생하지 않아야 하며, 이때는 보통 호출자가 다른 시나리오(예: 다시 시도하거나 오류 메시지)를 수행할 수 있습니다.

관련하여 더 깊이 있는 정보를 얻기 위해 아래의 유사 질문들을 참고하시면 좋겠습니다:

  1. 모든 스레드가 wait 상태: 스레드의 대기 상태 전이와 관련된 설명이 포함되어 있습니다.

  2. ReentrantLock 과 Condition 에 대해 질문 있습니다.: ReentrantLock을 사용한 동기화 방법에 대해 설명한 질문으로 도움이 될 수 있습니다.

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

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

0

81

1

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

0

69

2

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

0

69

2

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

0

128

1

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

0

79

1

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

0

90

2

메모리 가시성 문제 질문

0

65

1

Future4-이유 질문

0

60

1

오타 제보

0

70

2

runnable 질문

0

91

2

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

0

107

1

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

0

122

1

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

0

75

1

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

0

81

1

synchronized 와 인스턴스의 lock

0

88

2

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

0

60

1

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

0

55

1

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

0

64

2

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

0

74

2

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

0

101

2

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

0

66

2

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

0

79

2

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

0

47

1

Executor 스레드 풀 관리 질문

0

103

2