Todos los Consumer los implemento con LinkedBlockingQueue:
http://download.java.net/jdk7/archive/b123/docs/api/java/util/concurrent/LinkedBlockingQueue.html
Muchas gracias, tienes razón con LinkedBlockingQueue funciona.
Un detalle al margen de la cuestión.
No es necesario if( sharedQueue.size() > 0 ) puesto que take() bloquea si la cola está vacía.
Hola,
Tengo una duda y si alguien me puede dar una pista le estaría muy agradecido.
Resulta que quiero implementar un Productor- Consumidor.
Para ello empleo la clase BloquingQueue y lo que quieroes que me alamcene List<DatoAlmacenar>.
Mi definicion es la siguiente:
BlockingQueue <DatasBolcado> sharedQueue = new SynchronousQueue<DatasBolcado>();
boolean continuar = true;
private String rutaDef = null;
public HiloSecuencialBolcado(){}
public void addData(List<JPacket> lista ){
DatasBolcado data = new DatasBolcado(lista);
encolar(data);
}
private void encolar(DatasBolcado data ) {
sharedQueue.add(data);
}
/**
* Establece la ruta del fichero de la nueva captura y copia la lista que se le pasa como parametro.
*/
public void run() {
while( continuar ) {
try {
if( sharedQueue.size() > 0 ){
volcadoFichero(sharedQueue.take().getLista());
} else {
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Pero cuando hago sharedQueue.add(data); o sharedQueue.put(data);
me aparece vacía. Es decir sharedQueue.size() > 0 siempre es false y no me entra en mi función de volcado
Muchas gracias y cualquier sugerencia es bien recibida.