2010-10-26 15 views

Respuesta

5

El tamaño de un ConcurrentLinkedQueue no tiene límites, por lo que si los productores ponen artículos más rápido de lo que los consumidores pueden eliminarlos, eventualmente se los comerá en la memoria. Si desea limitar el tamaño de la cola, intente con una cola de bloqueo, como LinkedBlockingQueue o ArrayBlockingQueue. El tamaño del primero puede ser opcionalmente limitado, mientras que el segundo siempre está limitado.

+0

Gracias por su respuesta, Sin embargo, utilicé ConcurrentLinkedQueue porque es concurrente, ¿Está sugiriendo clases no ordinarias que requerirán que agregue sincronización al acceder a estas variables? – Youval

+1

@Youval, todas las implementaciones de 'BlockingQueue' son seguras para subprocesos, como se declara en [los documentos de API] (http://download.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html) –

+0

Sin embargo, bloquear un hilo podría afectar el rendimiento general de la aplicación en aplicaciones altamente concurrentes. Entonces hay contras y pros. –

0

Estoy un poco retrasado en esto, pero siempre puede establecer un límite superior y, cuando se supera, su método consumirá un token para dejar espacio para el siguiente y así sucesivamente.

Cuestiones relacionadas