나는 다음과 같은 코드를 가지고있다. 각 제작자에 대해 하나의 대기열. 소비자는 모든 대기열을 반복하며 소비 할 작업이 있는지 확인합니다. 그가 검사중인 대기열에 작업이 있으면 소비합니다. 그렇지 않으면, 그는 모든 대기열에 대해 반복 작업을 완료 할 때까지 다음 대기열을 확인합니다.자바 다중 큐 생산자 소비자
지금까지 모든 대기열을 반복하여 모두 비 었으면 그는 그 중 하나에 무언가를 포함하기를 기다리는 대신 루프를 계속합니다 (바깥 쪽 while
참조).
대기열 중 하나에 뭔가가있을 때까지 소비자를 대기 상태로 만들 수 있습니까?
다음 시나리오에 문제가 있습니다. 대기열이 2 개 밖에 없다고합시다. 소비자가 첫 번째 것을 확인했고 그것은 비어있었습니다. 두 번째 것 (비어 있음)을 확인하는 것처럼 프로듀서는 첫 번째 대기열에 무엇인가 넣습니다. 고객이 염려하는 한 대기열은 모두 비어 있으므로 기다려야합니다 (그 중 하나가 더 이상 비어 있지 않고 계속 반복해야 함).
편집 : 마지막으로 한 가지. 이것은 나를위한 운동입니다. 나 자신을 동기화 구현하려고 해요. 그래서 자바 라이브러리 중 하나가 이것을 구현하는 솔루션을 가지고 있다면 나는 그것에 관심이 없다. 나는 이것을 어떻게 구현할 수 있는지 이해하려고 노력하고있다.
추가 신호/통지를하기 위해 생산자를 수정할 수있는 경우가 아니면 다음과 같은 두 가지 유형의 솔루션이 있습니다. 1) 시간 초과를 사용하여 CPU 소비와 응답 간의 균형을 찾거나 2) 대기열에서 대기중인 추가 스레드를 사용하고 소비자에게 알린다. 두 번째 접근법의 추가 스레드는 메모리를 많이 소비하지만 CPU를 기다리는 시간은 거의 없습니다. – Holger