5

he leído el blog, pero no estoy seguro de si su conclusión es correcta:¿Cuál es la diferencia entre LinkedBlockingQueue y ConcurrentLinkedQueue?

http://www.javacodegeeks.com/2010/09/java-best-practices-queue-battle-and.html#ixzz1seaiSLwp

Dijo: Como se puede ver en el rendimiento proporcionado resultados LinkedBlockingQueue logró el mejor combinado (adición y eliminar elementos) resultados de rendimiento y debería ser su candidato número uno para implementar schenarios productor - consumidor.

Me pregunto, ¿no es más rápido si no uso el candado en mi código?

¿Por qué el LinkedBlockingQueue es más rápido que el Queue sin bloqueo (ConcurrentLinkedQueue)?

Gracias!

+3

Forget blogs al azar:? ¿Ha pensado en leer el Javadoc * * no la hizo las palabras 'limitado', 'ilimitado' y 'bloqueo' ¿transmiten algo? – EJP

+0

Relacionados: http://stackoverflow.com/q/1426754/931379 – Pursuit

Respuesta

4

ConcurrentLinkedQueue no es bloqueando queue. No implementa la interfaz BlockingQueue y, por lo tanto, no proporciona los métodos de bloqueo put() y take(). Estos métodos son necesarios para una configuración de productor/consumidor, porque necesita organizar que el consumidor bloquee mientras no haya nada que consumir, y que el productor bloquee cuando los consumidores no consuman con la suficiente rapidez.

-1

LinkedBlockingQueue es Deque y ConcurrentBlockingQueue is not. Compruebe Javadoc para más detalles

+1

[LinkedBlockingDeque] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedBlockingDeque.html) y [LinkedBlockingQueue] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedBlockingQueue.html) son dos clases diferentes. –

+0

No creo que LInkedBlockingQueue sea una deque, y no creo que ConcurrentBlockingQueue sea una clase en el tiempo de ejecución de Java. –

1

Este punto de referencia es extraño: el uso de la cola simultánea como cola de bloqueo no tiene sentido o me falta algo. Este código no va a salvar el planeta supongo:

while(result == null) 
    result = concurrentLinkedQueue.poll(); 

y es, por supuesto, menos eficiente que:

linkedBlockingQueue.take(); 
Cuestiones relacionadas