Sto cercando di eseguire molte attività utilizzando un ThreadPoolExecutor. Di seguito è riportato un esempio ipotetico:ThreadPoolExecutor Block quando la coda è piena?
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)
Il problema è che ho subito ottenere un java.util.concurrent.RejectedExecutionException dal momento che il numero di attività supera le dimensioni della coda di lavoro. Tuttavia, il comportamento desiderato che sto cercando è quello di avere il blocco thread principale fino a quando non c'è spazio nella coda. Qual è il modo migliore per farlo?
Dai un'occhiata a questa domanda: http://stackoverflow.com/questions/2001086/how-to-make-threadpoolexecutors-submit-method-block-if-it-is-saturated – Kiril
[Questa risposta] (http : //stackoverflow.com/a/4522411/394431) a un'altra domanda suggerisce di utilizzare una sottoclasse 'BlockingQueue' personalizzata che blocca su' offerta() 'delegando a' put() '. Penso che finisca per funzionare più o meno come il 'RejectedExecutionHandler' che chiama' getQueue(). Put() '. –
L'inserimento diretto in coda sarebbe errato, come spiegato in questa risposta http://stackoverflow.com/a/3518588/585903 –