Comment vérifier si toutes les tâches exécutées sur ExecutorService sont terminées

Je v ai ConcurrentLinkedDeque que j'ai choisi pour synchronique push/pop
et je v ai quelques async tâches qui sont un élément de la pile et si cet élément a des voisins C'est en le poussant à pile.

Exemple de code:

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)
                }
             } 
         }
    }

Je voudrais avoir relevé supplémentaire dans la boucle while qui répond à la question - "toutes les tâches de l'Exécuteur testamentaire est en train de travailler?"

source d'informationauteur user4129715