2012-12-11 3 views
5

빠른 설명하십시오자바 -BlockingQueue - 여러 생산자, 단일 소비자

내가 BlockingQueues이 스레드 알고 있습니다.

단일 소비자가 소비하기 위해 이벤트를 떨어 뜨릴 수있는 모든 제작자에게 차단 대기열에 대한 단일 참조를 전달할 수 있다는 것을 의미합니까?

그렇지 않으면 일반 업데이트가 있거나 없을 수도 있고 최대 효율을 읽는까지 생성해야하는 것은 극복 할 수없는 작업입니다.

답변

5

단일 사용자가 소비 할 이벤트를 전혀 삭제할 수없는 모든 제작자에게 차단 대기열에 대한 단일 참조를 전달할 수 있다는 것을 의미합니까?

한 마디로 예. 이것은 안전합니다. documentation을 인용하려면 :

BlockingQueue 구현은 스레드로부터 안전합니다. 모든 대기열 처리 방법은 내부 잠금 또는 다른 형태의 동시성 제어를 사용하여 원자 적으로 효과를 얻습니다.

+0

멋진. 그것은 효과가있는 것처럼 보이지만, 나는 1 년 후에 이슈에 부딪 치고 싶지 않습니다. – Sheriff

1

스레드 안전성이란 모든 스레드에서 액세스 할 수있는 대기열의 인스턴스 하나만 있으면된다는 의미입니다. 동시 데이터 구조는 이러한 액세스를 관리합니다. 이것은 또한 사용자측과의 동기화가 필요 없음을 의미합니다.

+0

고맙습니다. 내가이 길을 가기 전에 그냥 안전하고 싶었어. 과거에는 항상 생산자/소비자 쌍방이 있었지만 지금은 중앙 집중화하려고합니다. – Sheriff

+1

동시 콜렉션은 성능이 뛰어 나기 때문에 미래를위한 저장 방법 인 것 같습니다. – Zhedar