@gstackoverflow: il problema principale della coda limitata è che ha una capacità massima, quindi se la coda delimitata è piena, verrà bloccato quando si desidera aggiungere questa "pillola avvelenata".
Tenete a mente che la pillola di veleno deve essere posto immediatamente e non può aspettare fino a quando la coda ha un pò di spazio, come questa tecnica è utilizzata per spegnere con garbo i consumatori quando si verifica un'eccezione (altrimenti non esiste tecnica più bello per i consumatori di arresto).
Edit: Per fare un esempio parla più di mille frasi vediamo un semplice esempio (tutti i crediti per l'esempio vanno a Java Concurrency in Practice), con un filo produttore e un filetto dei consumatori:
public class CrawlerThread extends Thread { //The Producer Thread
public void run() {
try {
crawl(root);
} catch (InterruptedException e) { /* fall through */ }
finally {
while (true) {
try {
queue.put(POISON);
break;
} catch (InterruptedException e1) { /* retry */ }
}
}
}
private void crawl(File root) throws InterruptedException {
//some code
}
}
public class IndexerThread extends Thread { //The consumer Thread
public void run() {
try {
while (true) {
File file = queue.take();
if (file == POISON)
break;
else
indexFile(file);
}
} catch (InterruptedException consumed) { }
}
}
Ora, quando si esamina il thread di produzione (CrawlerThread), si vede che la pillola velenosa viene posta alla fine della corsa o in una situazione più terribile, quando si verifica un'eccezione.
Ora diciamo che vuoi usare una coda limitata come interfaccia tra il produttore e il consumatore, supponiamo che la coda sia piena all'istante t, e un'eccezione si verifica nel produttore al tempo t, il produttore non lo farà essere in grado di mettere la pillola velenosa in coda e invece di chiudere il thread dei consumatori, il consumatore attenderà ancora che gli elementi entrino in coda. Ecco perché l'approccio Poison pill non è raccomandato se si utilizza una coda limitata, poiché potrebbe potenzialmente portare a un risultato imprevisto.
Non riesco a capire il problema con le code limitate – gstackoverflow
È collegato alla correttezza? – gstackoverflow