2011-07-06 2 views
5

그래서 생산자/소비자 유형 응용 프로그램에서 고정 크기 BlockingQueue [ArrayBlockingQueue]를 사용하고 있지만 사용자가 대기열 크기를 즉시 변경할 수있게하려고합니다. 문제는 생성 후 용량을 변경할 수있는 BlockingQueue 구현이 없다는 것입니다. 누구든지 전에 이것을 보았습니까? 어떤 아이디어?Re-largeable Java BlockingQueue

답변

1

LinkedBlockingQueue를 확장 할 수 있습니다. 그것의 한계는 소프트 한도 (즉, 추가 체크)이며, 당신이 변경할 수있는 무엇인가를 만들 수 있습니다 (내장 된 것을 비활성화하고 자신을 넣음으로써)

+0

많은 내부 코드를 복사/붙여 넣기하지 않으면 불가능합니다. 전기 톱을 별도의 구현 (예 : Apache Harmony의 구현)으로 가져 가야합니다. – jbellis

+0

@jbellis 왜 하위 클래스에 코드를 복사해야합니까? –

+3

서브 클래 싱을 통해 원하는 기능을 얻을 수 없습니다. 너무 많이 최종/개인입니다. – jbellis

2

가장 확실한 해결책은 귀하의 상황에 따라 적절하게) 새로운 큐를 원하는 업데이트 된 용량으로 인스턴스화하기 만하면됩니다. 그런 다음 이전 큐의 모든 것을 새로운 큐로 밀어 넣습니다.

+0

이렇게하면 이전 큐에 대한 참조가있는 모든 스레드가 차단되어 새 큐의 새 내용이 아닌 이전 큐의 새 내용을 기다립니다. –

+1

@bkail : 그래서 내가 "당신의 상황에 따라"라고 말한 것입니다. OP가 블로킹 큐에 대한 많은 참조를 가지고 있다면, 그는 리졸버가이 솔루션을 작동하게 만들 필요가있을 것입니다 (예를 들어 큐 자체를 외부 적으로 큐 역할을하는 컨테이너 오브젝트로 감싸는 것입니다. 변경됨). –

관련 문제