Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > BloquingQueue no recibe mis datos

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.

mayo 8, 2013 | Unregistered CommenterCarlosM

Todos los Consumer los implemento con LinkedBlockingQueue:

http://download.java.net/jdk7/archive/b123/docs/api/java/util/concurrent/LinkedBlockingQueue.html

mayo 9, 2013 | Registered Commenterchoces

Muchas gracias, tienes razón con LinkedBlockingQueue funciona.

mayo 10, 2013 | Unregistered CommenterCarlosM

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.

mayo 10, 2013 | Registered Commenterchoces