Bloco ThreadPoolExecutor quando a fila está cheia?

Estou tentando executar muitas tarefas usando um ThreadPoolExecutor. Abaixo está um exemplo hipotético:

def workQueue = new ArrayBlockingQueue<Runnable>(3, false)
def threadPoolExecutor = new ThreadPoolExecutor(3, 3, 1L, TimeUnit.HOURS, workQueue)
for(int i = 0; i < 100000; i++)
    threadPoolExecutor.execute(runnable)

O problema é que eu recebo rapidamente uma java.util.concurrent.RejectedExecutionException, já que o número de tarefas excede o tamanho da fila de trabalho. No entanto, o comportamento desejado que estou procurando é ter o bloco de encadeamento principal até que haja espaço na fila. Qual é o melhor jeito de concluir isso?

questionAnswers(6)

yourAnswerToTheQuestion