ThreadPoolExecutor Block Wenn die Warteschlange voll ist?

Ich versuche viele Aufgaben mit einem ThreadPoolExecutor auszuführen. Unten ist ein hypothetisches Beispiel:

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)

Das Problem ist, dass ich schnell eine java.util.concurrent.RejectedExecutionException erhalte, da die Anzahl der Aufgaben die Größe der Arbeitswarteschlange überschreitet. Das gewünschte Verhalten ist jedoch, dass der Haupt-Thread blockiert wird, bis in der Warteschlange Platz ist. Was ist der beste Weg, um dies zu erreichen?

Antworten auf die Frage(12)

Ihre Antwort auf die Frage