인프런 커뮤니티 질문&답변

FWoody님의 프로필 이미지
FWoody

작성한 질문수

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

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

작성

·

64

0

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

 

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

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

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

  2. wait()을 위한 대기

     

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

 

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

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

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. Hoin Kim님

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

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

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

 

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

감사합니다.

0

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

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

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

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

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

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

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

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

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

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

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

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

FWoody님의 프로필 이미지
FWoody

작성한 질문수

질문하기