Supponiamo che io abbia una coda piena di attività che devo sottoporre a un servizio di esecuzione. Li voglio elaborati uno alla volta. Il modo più semplice a cui riesco a pensare è:
- Prendi un compito dalla coda
- Invialo all'esecutore
- Chiama .get sul Future restituito e blocca fino a quando non è disponibile un risultato
- Prendi un altro compito dalla coda ...
Tuttavia, sto cercando di evitare il blocco completo. Se ho 10.000 di queste code, che necessitano che i loro compiti vengano elaborati uno alla volta, finirò lo spazio dello stack perché la maggior parte di loro si aggrapperà ai thread bloccati.
Quello che vorrei è inviare un'attività e fornire una richiamata che viene chiamata al termine dell'attività. Userò quella notifica di richiamata come flag per inviare l'attività successiva. (a quanto pare, funzionalejava e jetlang utilizzano algoritmi non bloccanti, ma non riesco a capire il loro codice)
Come posso farlo usando java.util.concurrent di JDK, a corto di scrivere il mio servizio di esecutore?
(la coda che mi fornisce questi compiti potrebbe bloccarsi, ma questo è un problema da affrontare in seguito)