Qual è il modo migliore per gestire RejectedExecutionException
durante l'utilizzo di ThreadPoolExecutor
in Java?Come gestire RejectedExecutionException con ThreadPoolExecutor in java
Voglio assicurarmi che l'attività inviata non sia trascurata e debba essere sicuramente eseguita. A partire da ora non ci sono requisiti in tempo reale per svolgere l'attività.
Una delle cose che pensavo potesse essere fatta era attendere in un ciclo finché non so che c'è spazio nella coda eseguibile, e poi andare avanti e aggiungerlo alla coda.
Sarebbe felice se le persone possano condividere le loro esperienze.
Aggiunta la soluzione possibile ho pensato di:
while(executor.getQueue().remainingCapacity <= 0){
// keep looping
Thread.sleep(100);
};
//if the loop exits ,indicates that we have space in the queue hence
//go ahead and add to the queue
executor.execute(new ThreadInstance(params));
Questo creerà una condizione di competizione se più di un thread sta tentando di farlo. Brucia inoltre una CPU che potrebbe richiedere più tempo per l'executor di cancellare la coda. per esempio. se c'è una sola CPU per il sommatore e l'esecutore, questo potrebbe essere disastroso. –
Dall'architettura ci sarebbe solo un thread che lo fa, e per gestire il consumo di tempo della CPU, sto facendo il thread sleep.Come fa ora? – Neeraj
Dormire, anche per un breve periodo (anche 1 - 10 ms) è molto meglio di no. 100 ms è anche un buon valore. Questo va bene se hai solo un thread di pubblicazione. –