Disons que j'ai une file d'attente pleine de tâches que je dois soumettre à un service d'exécuteur testamentaire. Je veux qu'ils soient traités un à la fois. Le moyen le plus simple auquel je puisse penser est de:
- Prendre une tâche de la file d'attente
- Soumettez-le à l'exécuteur testamentaire
- Appelez .get sur le Future retourné et bloquez jusqu'à ce qu'un résultat soit disponible
- Prenez une autre tâche de la file d'attente ...
Cependant, j'essaie d'éviter de bloquer complètement. Si j'ai 10000 de ces files d'attente, qui nécessitent que leurs tâches soient traitées une par une, je vais manquer d'espace dans la pile, car la plupart d'entre elles conserveront les threads bloqués.
Ce que je voudrais, c'est soumettre une tâche et fournir un rappel qui est appelé lorsque la tâche est terminée. J'utiliserai cette notification de rappel comme indicateur pour envoyer la tâche suivante. (Functionaljava et Jetlang utilisent apparemment de tels algorithmes non bloquants, mais je ne comprends pas leur code)
Comment puis-je faire cela en utilisant java.util.concurrent de JDK, sans écrire mon propre service exécuteur?
(la file d'attente qui me nourrit de ces tâches peut elle-même se bloquer, mais c'est un problème à résoudre plus tard)