Sto cercando un modo per bloccare fino a quando uno BlockingQueue
è vuoto.Come bloccare fino a quando un BlockingQueue è vuoto?
So che, in un ambiente con multithreading, finché ci sono produttori che inseriscono articoli nello BlockingQueue
, ci possono essere situazioni in cui la coda diventa vuota e dopo pochi nanosecondi è piena di elementi.
Tuttavia, se c'è solo un produttore, potrebbe essere necessario attendere (e bloccarlo) finché la coda non è vuota dopo che ha interrotto l'inserimento degli elementi nella coda.
Java/Pseudocodice:
// Producer code
BlockingQueue queue = new BlockingQueue();
while (having some tasks to do) {
queue.put(task);
}
queue.waitUntilEmpty(); // <-- how to do this?
print("Done");
Avete qualche idea?
EDIT: so che il confezionamento BlockingQueue
e l'utilizzo di una condizione in più farebbe il trucco, sto solo chiedendo se ci sono alcune soluzioni pre-fatto e/o alternative migliori.
Chiaramente si potrebbe chiamare 'peek' fino a quando non ritorna' null'. Che cosa si tratta del blocco che rende questa una soluzione inaccettabile? – OldCurmudgeon
La risposta alla tua modifica, AFAIK, è no. Nota che, come ho scritto nella mia risposta, il tuo caso d'uso è molto particolare ... assicurati di aver davvero bisogno di fare ciò che stai chiedendo. Non dichiari perché ** hai bisogno ** di un simile comportamento. –
@ JoãoFernandes: Non ne ho assolutamente bisogno ora, è solo per curiosità. Mi piace leggere opinioni su problemi di programmazione. – gd1