나는 다음과 같은 상황이 있습니다생산자 - 소비자가 : 알리 알 어떻게 prodcution이 완료
-
읽기 데이터베이스
- 의 데이터는 "계산"데이터베이스에
- 쓰기 결과를 작동합니까
나는 데이터베이스에서 읽은 스레드를 가지고 있으며 생성 된 객체를 BlockingQueue에 저장한다. 이러한 객체는 매우 무거운 가중치이므로 메모리에있는 객체의 양을 제한하는 대기열입니다. 여러 스레드가 큐에서 개체를 가져 와서 작업을 수행하고 두 번째 큐에 결과를 저장합니다. 마지막 스레드는 두 번째 큐에서 결과를 가져 와서 결과를 데이터베이스에 저장합니다.
문제는 교착 상태를 방지하는 방법입니다. "계산 쓰레드"는 더 이상 객체가 큐에 저장되지 않을 때를 알아야합니다. 현재 스레드 (참조 가능)의 참조를 서로 전달하고 폴링 또는 제안 전에 thread.isDone()을 확인한 다음 요소가 null 인 경우이를 수행합니다. 또한 큐의 크기를 확인합니다. 큐에 요소가있는 한 소비해야합니다. take 또는 put을 사용하면 교착 상태가 발생합니다.
더 간단한 방법이 있나요?
은 http://stackoverflow.com/questions/5326013/proper-implementation-of-producer-consumer-scenario-and-graceful-termination-of의 속일 수 있습니다. –