2015-01-29 12 views
0

나는 springThreadPoolExecutorFactoryBean을 사용하고 있습니다. 그것의 마스터 스레드 풀. 그리고 어떤 경우에는 CompletionService을 만들어야 완성 된 스레드를 얻을 수 있습니다.마스터 스레드 풀을 사용하는 별도의 스레드 풀을 만드는 방법

내 코드 :

ExecutorService pool = Executors.newFixedThreadPool(list.size()); 

CompletionService<T> completionService = new ExecutorCompletionService<T>(pool); 

문제는 내가 여기에 고정 스레드 풀을 만들려하지만, 너무 많은 스레드 생성을 방지하기 위해, 마스터 스레드 설문 조사를 사용하지 않는 것입니다.

물론 완료 서비스에서 마스터 스레드 풀을 전달할 수 없습니다. 완료 서비스에서 가치를 얻을 때 completionService.take() 완전히 관련이없는 스레드가 발생합니다.

아마도 마스터 스레드 풀에서 일종의 고정 된 스레드 풀을 생성하고 완료 서비스에 전달하는 방법을 찾는 것을 도울 수 있습니다.

많은 감사합니다.

+0

어쩌면 당신은 하나의 쓰레드 풀을 가진 커스텀'ExecutorService'를 만들고, 다른 클래스의 태스크를위한 다른 큐를 만들 필요가 있습니다. 완전한 사용자 정의 객체 일 필요는 없으며 ThreadPoolExecutor 상단에 여분의 지능형 요소를 쌓아 올리는 래퍼 일 수도 있습니다. –

답변

0

오해가 있습니다. CompletionService은 작업을 수신하고 비동기 적으로 실행하며 작업이 완료된 순서대로 결과를 제공합니다. CompletionService#take()은 스레드가 아닌 제출 된 태스크의 결과를 리턴합니다.

ExecutorCompletionService은 다른 소스에서 제출 된 작업을 매우 잘 수행 할 수있는 Executor에 작업 실행을 위임합니다. 따라서 코드 예제에서 보여주는 것과 아무런 문제가 없어야합니다.

관련 문제