Java: ExecutorService que bloqueia o envio após um certo tamanho de fila
Estou tentando codificar uma solução na qual um único thread produz tarefas intensivas de E / S que podem ser executadas em paralelo. Cada tarefa possui dados significativos na memória. Então, eu quero poder limitar o número de tarefas pendentes no momento.
Se eu criar ThreadPoolExecutor assim:
ThreadPoolExecutor executor = new ThreadPoolExecutor(numWorkerThreads, numWorkerThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(maxQueue));
Então oexecutor.submit(callable)
jogaRejectedExecutionException
quando a fila ficar cheia e todos os segmentos já estiverem ocupados.
O que posso fazer para fazerexecutor.submit(callable)
bloquear quando a fila estiver cheia e todos os segmentos estiverem ocupados?
EDITAR: Eu tenteiesta:
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
E, de certa forma, alcança o efeito que eu quero alcançar, mas de maneira deselegante (basicamente segmentos rejeitados são executados no segmento de chamada, portanto, isso impede o segmento de enviar mais).
EDIT: (5 anos depois de fazer a pergunta)
Para quem lê esta pergunta e suas respostas, não tome a resposta aceita como uma solução correta. Por favor, leia todas as respostas e comentários.