Ho ottenuto ConcurrentLinkedDeque che sto utilizzando per gli elementi push/pop sincroni, e ho alcune attività asincrone che prendono un elemento dallo stack e se questo l'elemento ha vicini Lo sta spingendo a impilare.Come verificare se tutte le attività in esecuzione su ExecutorService sono state completate
codice Esempio:
private ConcurrentLinkedDeque<Item> stack = new ConcurrentLinkedDeque<>();
private ExecutorService exec = Executors.newFixedThreadPool(5);
while ((item = stack.pollFirst()) != null) {
if (item == null) {
} else {
Runnable worker = new Solider(this, item);
exec.execute(worker);
}
}
class Solider{
public void run(){
if(item.hasNeighbors){
for(Item item:item.neighbors){
stack.push(item)
}
}
}
}
vorrei avere ulteriore dichiarazione in ciclo while che risponde alla domanda - "qualsiasi operazione in Esecutore sta funzionando?"
ho pensato che ci sia già il metodo in java utilizzato per questo: < ogni caso! Ho usato la tua soluzione funziona, grazie! :) – user4129715
Quale sarebbe lo scopo di allDone qui, non posso il futuro.isDi ritorno vero o falso da solo? BTW - ottima risposta! – User3
@ User3 lo scopo di 'allDone' è quello di ottenere un singolo valore booleano che indica se _all_ dei futuri è fatto o meno (usando l'operatore' & = '). 'future.isDone()' può essere usato solo per verificare se un Futuro individuale è completo o meno –